- 博客(45)
- 收藏
- 关注
原创 数据结构:⼆叉树(1)
本文系统讲解了树和二叉树的数据结构知识。首先介绍了树的基本概念、术语(如度、层次、深度等)和三种表示方法(双亲表示法、孩子表示法、孩子双亲表示法)。然后重点阐述了二叉树的定义、五种基本形态、特殊类型(满二叉树和完全二叉树)及其性质。详细讲解了二叉树的两种存储结构(顺序结构和链式结构),并以大根堆为例,实现了堆的初始化、销毁、插入等核心操作,重点分析了插入时的向上调整算法。文章通过代码示例演示了堆的具体实现过程,并进行了功能测试验证。
2025-12-23 20:33:03
1269
62
原创 数据结构:队列
本文讲解了队列的基本概念、实现方式及相关操作。队列是一种先进先出(FIFO)的线性表,支持在队尾插入(入队)和队头删除(出队)操作。文章重点介绍了链式队列的实现方法,通过头尾指针(phead和ptail)优化了链表操作效率。详细讲解了队列初始化、入队、出队、判空、获取队首/队尾元素、打印队列和销毁队列等核心操作的实现代码,并给出了完整的多文件测试示例。相比顺序队列,链式队列避免了空间浪费问题,每个操作的时间复杂度均为O(1),是更优的实现选择。
2025-12-13 16:49:23
1101
45
原创 数据结构:栈
本文介绍了栈的基本概念、结构及实现方法。栈是一种后进先出(LIFO)的线性数据结构,支持入栈、出栈等基本操作。文章详细讲解了使用数组实现栈的具体代码,包括初始化、销毁、扩容、入栈、出栈、获取栈顶元素等核心功能。通过顺序表结构实现栈操作,保证了O(1)的时间复杂度。文中还提供了测试代码示例,并展示了力扣"有效的括号"问题的栈解法,验证了栈在实际算法问题中的应用价值。最后提到后续将讲解队列相关知识。
2025-12-03 16:18:05
1405
21
原创 数据结构:双向链表(总)
本文详细讲解了双向链表的概念、结构及其实现方法。首先介绍了双向链表的基本概念和带头双向循环链表的结构特点,然后逐步实现了双向链表的初始化、尾插、头插、尾删、头删、销毁等核心操作。文章还对比了顺序表与链表的异同点,并提供了多个链表算法题的解题思路,包括移除链表元素、反转链表、寻找中间节点、合并有序链表、链表分割和回文结构判断等。通过代码示例和图示详细解析了各操作的实现逻辑,帮助读者深入理解双向链表的原理和应用场景。
2025-11-27 15:09:14
1414
82
原创 数据结构:双向链表(3)
本文介绍了四种链表经典算法题的解题思路和实现方法:1. 链表的中间节点 - 使用快慢指针法(时间复杂度O(n),空间复杂度O(1));2. 合并两个升序链表 - 通过双指针比较和拼接(时间复杂度O(m+n));3. 链表分割 - 创建两个子链表分别存储小于x和大于等于x的节点;4. 链表回文结构 - 将链表值存入数组后使用双指针验证。文章详细解析了每种算法的核心思路、代码实现和复杂度分析,重点讲解了快慢指针、双指针比较等链表操作技巧,适用于理解链表操作的核心思想。
2025-11-23 13:47:53
1417
39
原创 数据结构:双向链表(1~2)
本文深入讲解了双向链表的概念与实现,对比分析了顺序表与链表的优缺点,并提供了链表相关算法题的解题思路。 文章首先介绍了双向链表的结构特点:每个节点包含前驱和后继指针,支持双向遍历和高效的插入删除操作。详细讲解了带头双向循环链表的实现方法,包括初始化、尾插、头插、尾删、头删、销毁等核心操作的代码实现和逻辑分析。 在顺序表与链表的对比部分,文章指出顺序表适合频繁随机访问的场景,而链表更适合数据动态变化的场景。最后通过"移除链表元素"和"反转链表"两个经典算法题,展示了链表
2025-11-19 13:30:28
1898
84
原创 数据结构:双向链表(1~2)
本文详细讲解了双向链表的概念、结构及其实现方法。首先介绍了双向链表的基本概念和结构特点,包括带头双向循环链表的实现。随后通过代码示例展示了双向链表的初始化、尾插、头插、尾删、头删、销毁等基本操作,并分析了顺序表与链表的异同点。文章还通过两个链表算法题(移除链表元素和反转链表)进一步巩固相关知识。最后总结全文内容,帮助读者全面理解双向链表的实现原理和应用场景。
2025-11-19 13:28:39
972
17
原创 数据结构:双向链表(2)
本文介绍了双向链表的查找、插入和删除操作实现方法,包括在指定位置前后插入节点、查找特定节点以及删除节点的代码实现。通过对比顺序表和链表在存储结构、访问效率等方面的差异,分析了各自的适用场景。同时讲解了两道链表算法题:移除特定值节点和反转链表,提供了迭代法解题思路和实现代码。文章涵盖了双向链表操作的核心逻辑与指针调整技巧,以及链表在算法题中的应用。
2025-11-16 09:27:52
1344
67
原创 数据结构:双向链表(1)
本文讲解了带头双向循环链表的数据结构及其实现。双向链表每个节点包含前驱和后继指针,支持双向遍历和高效插入删除操作。文章详细介绍了链表的初始化、尾插、头插、尾删、头删等核心操作,并给出了完整的C语言实现代码。通过图示和代码解析,展示了双向链表优于单链表的特性,如O(1)时间复杂度的尾插尾删操作。最后提供了一个测试用例,验证了各功能的正确性。这种链表结构在工程实践中广泛应用,具有处理边界情况简单、操作效率高等优点。
2025-11-13 14:29:55
1147
34
原创 数据结构:单链表
本文系统讲解了单链表的数据结构知识。主要内容包括:1.单链表的基本概念:通过节点指针串联的非连续线性结构,每个节点包含数据域和指针域;2.单链表的实现方法:详细介绍了节点创建、头插尾插、头删尾删、查找、指定位置插入删除等核心操作的代码实现;3.链表分类:从连接方向和头节点角度讲解了单链表、双链表、循环链表等不同结构的特点;4.性能分析:对比顺序表,说明链表在插入删除操作上的优势(时间复杂度O(1))。文章通过代码示例和图示解析,全面阐述了单链表的原理和实现要点。
2025-11-10 08:00:00
1251
83
原创 数据结构:单链表(2)
本文详细讲解了单链表的实现与操作,主要包括:1. 单链表节点的查找、插入和删除操作,包括在指定位置前后插入元素、删除指定位置及其后节点等核心函数实现;2. 通过示例代码完整展示了单链表的创建、增删改查等操作;3. 介绍了链表的分类方法,包括按连接方向(单/双向、循环/非循环)和是否有头节点进行分类。文章重点分析了单向不带头不循环链表的具体实现,为后续讲解双向带头链表奠定了基础。所有函数均配有详细注释和逻辑分析,并提供了完整的测试代码。
2025-11-05 16:33:09
1377
79
原创 数据结构:单链表(1)
本文详细讲解了单链表的基本概念、结构特点和实现方法。首先介绍了单链表相对于顺序表的优势:头部插入删除时间复杂度O(1)、无需扩容、避免空间浪费。然后详细阐述了单链表节点的结构组成(数据域和指针域)及C语言实现。重点讲解了单链表的核心操作:尾插、头插、尾删、头删,并提供了完整的代码实现和示例演示。文章还包含链表打印、销毁等辅助功能的具体实现,以及处理各种边界情况的注意事项。通过火车车厢的比喻帮助理解链表的非连续物理存储特性,最后给出了完整的测试代码和运行结果。
2025-11-02 13:03:49
1111
56
原创 数据结构:顺序表讲解(总)
本文系统讲解了顺序表的相关知识,包括线性表概念、顺序表分类(静态/动态)及实现细节。重点阐述了动态顺序表的核心操作(初始化、增删查改)及其时间复杂度分析,并提供了完整代码示例。文章还通过力扣算法题(移除元素、去重、合并有序数组)演示顺序表的实际应用,采用双指针/三指针法优化解法。最后强调内存管理(销毁函数)的重要性,为后续链表学习奠定基础。全文兼顾理论与实战,适合数据结构初学者系统学习顺序表。
2025-10-26 08:20:04
1371
31
原创 数据结构:顺序表讲解(2)
本文介绍了动态顺序表的实现方法,包括查找、销毁、指定位置插入/删除等操作,并给出了完整的代码示例。通过三个文件(头文件、实现文件、测试文件)展示了顺序表的具体实现过程。文章还讲解了三个基于顺序表的算法题:移除元素(双指针法)、删除有序数组重复项(快慢指针法)、合并两个有序数组(三指针法),分析了各算法的核心逻辑和时间复杂度。最后预告了后续将更新链表相关内容。
2025-10-24 07:45:00
1353
71
原创 数据结构:顺序表讲解(1)
本文介绍了顺序表的相关知识,主要包括:顺序表的概念与结构(基于数组的线性结构)、分类(静态和动态顺序表)、以及动态顺序表的实现。重点讲解了动态顺序表的初始化、扩容机制,以及尾插、头插、尾删、头删等核心操作的实现方法和时间复杂度分析(尾插/删O(1),头插/删O(n))。通过对比静态顺序表,突出了动态顺序表可扩容的优势,并详细说明了基于realloc的扩容策略(默认2倍增长)及其效率考量。文章通过代码示例和图示帮助理解顺序表的底层实现原理。
2025-10-22 09:08:06
1388
62
原创 C语言数据结构:算法复杂度(总)
本文系统介绍了算法复杂度分析的核心知识,包括: 数据结构与算法基础概念:数据结构是数据组织方式,算法是计算步骤,二者共同决定程序效率; 复杂度衡量标准:时间复杂度(运算速度)和空间复杂度(内存消耗)是算法评价的核心指标; 分析方法:采用大O渐进表示法,重点关注最坏情况下的时间/空间增长趋势; 常见复杂度类型:从O(1)到O(n!)的效率对比,以及典型应用场景; 实际案例:通过轮转数组问题对比不同解法,展示如何平衡时间与空间复杂度。文章强调算法复杂度分析是优化程序性能的关键基础。
2025-10-19 13:59:34
947
24
原创 C语言数据结构:算法复杂度(2)
本文深入解析了算法复杂度中的空间复杂度概念及其计算方法。空间复杂度衡量算法运行过程中额外临时开辟的空间量,使用大O渐进表示法进行评估。文章详细介绍了不同阶数的空间复杂度,包括常数阶O(1)、线性阶O(n)、二维阶O(n×m)和递归阶O(n),并通过具体代码示例进行说明。此外,文章对比了常见时间复杂度类型(从O(1)到O(n!))的性能特征和适用场景,提供了算法优化案例(如数组轮转问题的两种解法),展示了"空间换时间"的优化思路。最后强调空间复杂度分析对算法优化的重要性,为后续数据结构学习
2025-10-18 08:44:17
1436
55
原创 C语言数据结构:算法复杂度(1)
本文介绍了数据结构与算法的基本概念及其重要性,重点讲解了算法效率的衡量方法——时间复杂度和空间复杂度。通过具体代码示例(如轮转数组、冒泡排序等),阐述了如何分析算法的时间复杂度,并详细说明了大O渐进表示法的应用规则。文章指出,在评估算法时应关注最坏情况下的时间复杂度,并强调数据结构与算法对于编程能力提升的关键作用,特别是在企业招聘笔试面试中的重要性。最后总结了复杂度分析的基本方法和常见场景,为后续学习数据结构与算法打下基础。
2025-10-15 09:30:34
1452
59
原创 C语言⽂件操作讲解(1)
本文介绍了C语言中文件操作的核心概念。主要内容包括:1)文件的作用是实现数据持久化存储,避免程序退出后数据丢失;2)文件分为程序文件和数据文件,重点讲解了数据文件的持久性和共享性特点;3)区分了文本文件(ASCII存储)和二进制文件(直接二进制存储)的格式差异;4)详细说明了文件指针、标准流(stdin/stdout/stderr)的概念,以及使用fopen/fclose函数进行文件打开和关闭操作的要点。文章通过具体示例和对比分析,帮助读者理解文件操作的基本原理。
2025-10-15 09:18:30
1046
15
原创 C语言⽂件操作讲解(总)
本文系统讲解了C语言文件操作的核心知识,主要包括:文件的作用(持久化存储数据)、分类(程序文件与数据文件)、存储形式(文本文件与二进制文件)。详细介绍了文件操作的完整流程:打开与关闭(fopen/fclose)、顺序读写(fgetc/fputc等系列函数)、随机读写(fseek/ftell/rewind)。重点阐述了文件结束判定方法(feof/ferror)和文件缓冲区的运作机制(fflush函数)。通过实例演示了各类文件操作函数的使用场景和注意事项,为后续学习数据结构和C++打下坚实基础。文章采用比喻方式
2025-10-13 08:00:00
1556
21
原创 C语言⽂件操作讲解(3)
本文讲解了C语言文件操作中的随机读写、读取结束判定及文件缓冲区相关知识。主要内容包括:1. 随机读写函数fseek()、ftell()、rewind()的使用方法及示例;2. 文件读取结束的判定方法,包括fgetc()、fgets()和feof()等函数的返回值判断;3. 文件缓冲区的工作原理及fflush()函数的作用。文章通过实例代码详细说明了各项功能的实现方式,帮助读者掌握C语言文件操作的核心技术。
2025-10-12 07:00:00
1410
28
原创 C语言⽂件操作讲解(1~2)
本文系统讲解了C语言文件操作的核心知识,包括:1. 文件基础概念:阐述文件持久化存储的重要性,区分程序文件与数据文件,比较文本文件与二进制文件的存储特点。2. 文件操作流程:详细说明文件指针(FILE*)的作用,演示fopen/fclose函数的使用方法及注意事项。3. 顺序读写函数:全面介绍8个关键函数:字符读写(fgetc/fputc)、字符串读写(fgets/fputs)、格式化读写(fscanf/fprintf)以及二进制块读写(fread/fwrite),通过代码示例说明其用法和常见问题。4. 错
2025-10-11 00:00:00
1205
9
原创 C语言⽂件操作讲解(2)
本文介绍了C语言中文件顺序读写的相关函数,包括fgetc、fputc、fgets、fputs、fscanf、fprintf、fread和fwrite。详细讲解了每个函数的功能、参数、返回值及使用示例,重点区分了文本文件和二进制文件的操作差异。文章还涵盖了文件操作的关键概念,如文件指针、错误处理(feof和ferror)以及缓冲区管理等。通过具体代码示例,展示了如何正确使用这些函数进行文件读写操作,并指出了常见错误及注意事项,为C语言文件操作提供了实用的参考指南。
2025-10-10 06:54:55
1146
20
原创 假期过后博主回归
国庆假期彻底“放飞自我”后,才惊觉断更了好些天,实在抱歉让大家久等了 🙏 假期里沉迷放松的我,已经狠狠“反省”过啦~ 从今天起,咱们的C语言干货小课堂正式重启!一起加油,把C语言彻底拿下吧 💪。——链表、栈、队列、树这些“编程内功”,咱们一步一个脚印打扎实!的相关知识,搞定这块硬骨头后,就会进入。接下来的内容安排,先带大家吃透。亲爱的小伙伴们,久违啦!
2025-10-09 13:36:21
208
2
原创 C语言字符函数和字符串函数以及内存函数的讲解(汇总)
本文系统介绍了C语言中常用的字符和字符串处理函数,包括字符分类函数(如isalpha、isdigit等)、字符转换函数(tolower、toupper)、字符串操作函数(strlen、strcpy、strcat等)及其模拟实现方法,以及内存操作函数(memcpy、memmove等)。文章详细讲解了每个函数的功能、参数、返回值和使用注意事项,并通过代码示例演示了如何模拟实现这些函数。内容涵盖字符串长度计算、拷贝、连接、比较等基本操作,以及内存块的复制、设置和比较等高级功能,为C语言开发者提供了全面的字符串和内
2025-09-28 08:15:21
1053
26
原创 动态内存管理(2)
摘要:本文深入探讨C语言动态内存管理中的常见错误及柔性数组知识。重点解析了5种典型错误:解引用NULL指针、内存越界访问、释放非动态内存、释放部分动态内存及重复释放,并给出预防建议。同时介绍了柔性数组的特性:必须位于结构体末尾,使用malloc一次性分配结构体与数组内存,且内存连续无需单独释放。文章通过代码示例详细说明每种错误场景及解决方案,帮助开发者规避内存管理陷阱,提升程序稳定性。
2025-09-23 08:32:28
927
24
原创 自定义类型讲解
本文介绍了C语言中结构体、联合体和枚举类型的核心知识。结构体部分详细讲解了类型声明、变量创建与初始化、成员访问操作符(.和->)以及内存对齐规则(包括嵌套结构体和对齐数修改)。联合体部分阐述了其共享内存的特性、大小计算方法和实际应用(如判断字节序)。枚举类型则介绍了声明方式、默认值规则及其优点(增强可读性、类型检查等)。全文通过代码示例和内存布局图示,系统性地讲解了这些复合数据类型的定义、使用及底层原理,为C语言开发者提供了全面的参考指南。
2025-09-20 14:33:46
1130
32
原创 动态内存管理(1)
本文介绍了C语言动态内存分配的核心机制,包括malloc、free、calloc和realloc函数的使用方法。动态内存分配解决了静态内存固定大小的限制,允许程序在运行时根据需要申请和释放内存空间。文章详细讲解了malloc函数申请未初始化内存、calloc函数自动初始化为0的特性,以及realloc函数调整内存大小的两种场景。重点强调了内存分配失败检查和及时释放的重要性,避免内存泄漏和野指针问题。通过代码示例演示了动态内存管理的完整流程,包括申请、使用、扩展和释放内存的操作规范。
2025-09-20 14:27:07
756
20
原创 自定义类型:结构体、联合与枚举(2)
本文介绍了C语言中联合体(Union)和枚举(Enum)的相关知识。联合体是一种特殊数据类型,所有成员共享同一块内存空间,大小由最大成员决定,并需满足内存对齐要求。文章详细讲解了联合体的声明方式、特点、内存布局及大小计算规则,并通过代码示例演示了如何利用联合体判断系统字节序。枚举类型则用于列举可能的取值,具有增加代码可读性、支持类型检查等优点。全文通过实例代码和图示,深入浅出地解析了这两种自定义类型的使用方法和注意事项。
2025-09-17 08:46:14
837
41
原创 自定义类型:结构体、联合与枚举(1)
本文讲解了C语言结构体的相关知识点,包括结构体类型的声明、变量的创建与初始化、成员访问操作符以及内存对齐规则。主要内容有:1.结构体声明语法及typedef简化;2.变量创建的三种方式和两种初始化方法;3.成员访问操作符.和->的使用场景;4.内存对齐规则及其计算方式,包括嵌套结构体的处理。通过实际代码示例详细说明了结构体内存对齐的原理和计算方法,帮助理解结构体在内存中的存储方式。最后提到可用#pragma指令修改默认对齐数。文章旨在全面介绍结构体的基础概念和重要特性。
2025-09-13 15:58:23
787
33
原创 指针学习知识
本文系统介绍了C语言中指针的核心概念与应用,主要内容包括:内存和地址的基本概念、指针变量的声明与使用、指针运算规则、const修饰指针的用法、野指针的成因与防范、指针在函数传参和数组访问中的应用、多级指针及特殊指针类型(如void*、字符指针、数组指针、函数指针等)。文章通过大量代码示例详细讲解了指针操作、指针与数组/函数的关系、指针的类型意义等知识点,并分析了指针使用中的常见错误和注意事项。最后总结了指针在C语言程序设计中的重要性,为读者提供了全面的指针知识体系。
2025-09-10 08:27:15
972
17
原创 C语⾔内存函数
本文介绍了C语言中四个重要的内存操作函数:memcpy、memmove、memset和memcmp。memcpy用于内存块拷贝但不处理重叠区域;memmove功能类似但能正确处理内存重叠;memset用于设置内存块内容;memcmp用于比较两个内存块内容。文章详细讲解了每个函数的使用方法、参数说明,并提供了代码示例和模拟实现。特别强调了memcpy和memmove在处理重叠内存时的区别,以及这些函数在实际编程中的应用场景。通过具体示例展示了如何正确使用这些函数进行内存操作,并分析了实现原理。
2025-09-10 08:18:00
1148
18
原创 C语言字符函数和字符串函数
本文系统梳理C语言字符与字符串操作函数,涵盖分类、转换及核心字符串函数的功能解析与实现。主要内容包括:字符分类函数(如islower)和转换函数(如toupper)的用法;字符串长度计算函数strlen、拷贝strcpy、追加strcat、比较strcmp的功能特点及模拟实现;安全版本函数strncpy、strncat、strncmp的使用规范与实现;字符串查找函数strstr的原理及复杂模拟逻辑;以及字符串分割函数strtok的使用方法与注意事项。通过对比标准库函数特性与手动实现代码,帮助理解字符串操作的
2025-09-07 09:12:25
994
9
原创 C语言字符函数和字符串函数(2)
本文介绍了C语言中5个字符串处理函数的使用方法及模拟实现:1. strncpy函数(带长度限制的字符串拷贝)2. strncat函数(带长度限制的字符串追加)3. strncmp函数(带长度限制的字符串比较)4. strstr函数(字符串查找)5. strtok函数(字符串分割)文章详细讲解了每个函数的参数、返回值、注意事项,并提供了完整的模拟实现代码示例。这些函数比基础版本更安全灵活,能有效避免缓冲区溢出等问题,是C语言字符串处理的重要工具。
2025-09-06 14:44:53
860
13
原创 牛客一题讲解
Alice 和 Bob 很喜欢一起打牌,与扑克牌不同,他们打的牌的牌名只由单个大写字母组成,并没有 1−101-101−10 的数字牌。今天,他们又约着一起玩打对子,打对子的规则是:每个人会得到一定数量的牌,然后每个人可以任意次将两张相同牌名的牌作为对子打出,最后剩下牌少的人将获得胜利,如果剩余牌数相同,则收获平局,双方都无法获胜。由于牌太多,Alice 整理牌整理不过来了,因此她决定向你求助,询问自己最后会剩下多少张牌,以及自己是否能战胜 Bob 。第一行输入一个正整数 nnn (&n
2025-09-03 09:13:41
692
6
原创 C语言字符函数和字符串函数(1)
本文介绍了C语言中常用的字符和字符串处理函数,主要包括三类内容:1.字符分类函数(如isalpha、isdigit等)和字符转换函数(tolower、toupper);2.字符串操作函数strlen、strcpy、strcat、strcmp的功能说明及模拟实现方法;3.重点讲解了这些字符串函数的注意事项和使用规范,包括参数要求、返回值规则等。文章通过代码示例详细展示了各函数的应用场景和实现原理,为C语言字符串处理提供了实用参考。
2025-09-03 08:44:12
892
10
原创 数据在内存中的存储
本篇文章将讲解整数和浮点数在内存中存储(以float为例)知识的相关内容,为本章节知识的内容。一、整数在内存中的存储整数的2进制表⽰⽅法有三种,即原码、反码和补码。同时,整数分为有符号(signed)与无符号型(unsigned),先介绍下有符号与无符号型:首先C语言中signed 和unsigned 关键字修饰字符型和整型类型的,signed 关键字,表示该类型带有正负号,包含负值;
2025-08-29 09:00:14
452
4
原创 数据在内存中的存储
本篇文章将讲解整数和浮点数在内存中存储(以float为例)知识的相关内容,为本章节知识的内容。一、整数在内存中的存储整数的2进制表⽰⽅法有三种,即原码、反码和补码。同时,整数分为有符号(signed)与无符号型(unsigned),先介绍下有符号与无符号型:首先C语言中signed 和unsigned 关键字修饰字符型和整型类型的,signed 关键字,表示该类型带有正负号,包含负值;
2025-08-29 08:58:16
740
2
原创 指针讲解(完)
本篇文章将讲解字符指针变量,数组指针变量,函数指针变量,函数指针数组知识的相关内容,为本章节知识的内容,指针知识也将讲解完成。整形指针变量:存放的是整形变量的地址,能够指向整形数据的指针。浮点型指针变量:存放浮点型变量的地址,能够指向浮点型数据的指针。数组指针变量同理:存放的是数组的地址,能够指向数组的指针变量。代码如下(例):int (*p)[10];该例子:p先和*结合,说明p是⼀个指针变量,然后指针指向的是⼀个⼤⼩为10个整型的数组。所以p是 ⼀个指针,指向⼀个数组,叫数组指针。
2025-08-27 09:16:31
772
3
原创 指针讲解(3)
本篇文章将讲解数组名的理解,使⽤指针访问数组,⼆级指针、指针数组、指针数组模拟⼆维数组知识的相关内容,为本章节知识的内容。一、
2025-07-31 10:09:48
914
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅