2093 字
5 分钟
考研专业课学习记录2026-06-08
考研专业课学习记录 | 2026-06-08
今日学习内容
今天专业课学习三个半小时,系统复盘数据结构核心知识点,涵盖算法基础、线性表、栈与队列、数组矩阵相关内容,具体包括:算法的五大特性与程序的区别、渐近时间复杂度的大O表示法、线性表顺序存储的增删查操作时间复杂度、单链表的插入删除操作与时间复杂度、循环链表的结构与应用、栈的两种栈顶指针设置规则、循环队列的判空判满实现、前缀后缀表达式的转换与求值难点、二维数组与特殊矩阵的下标地址对应关系。
AI知识点带复盘
1. 算法的特性与程序辨析
考研核心考点:算法需满足有穷性、确定性、可行性、输入、输出五大特性,其中有穷性是算法与程序的核心区别——程序(如操作系统)可以无限运行,不满足有穷性。常考选择题辨析算法与程序的差异,以及简答题简述算法的五大特性。
2. 渐近时间复杂度与大O表示法
考研核心考点:
- 渐近时间复杂度的定义:忽略低阶项、常数系数,保留最高阶项,记作,用于描述算法随输入规模增长的时间增长趋势。
- 常见复杂度阶数排序:
- 常考题型:推导循环结构的时间复杂度,区分最好、最坏、平均时间复杂度(如顺序查找的最好、最坏、平均)。
3. 线性表的顺序存储及其操作复杂度
顺序表采用数组实现,存储地址连续:
- 按位查找:,可直接通过下标访问
- 按值查找:,需遍历数组匹配元素
- 插入/删除操作:平均需要移动个元素,时间复杂度,仅在表尾操作时可达到。 考研常考选择题对比顺序表与链表的操作复杂度,以及简答题分析顺序表的优缺点。
4. 单链表的插入删除与时间复杂度
单链表采用链式存储,无需连续存储空间:
- 按位置插入/删除:需先遍历找到目标节点的前驱,时间复杂度
- 已知目标节点的插入/删除:可直接修改指针,时间复杂度(考研常考该场景的编程实现)
- 头插法、尾插法建表:头插法复杂度,尾插法若带有尾指针可优化为一次遍历完成,总复杂度。 常考单链表的编程题实现,以及复杂度分析。
5. 循环链表的结构与应用
循环链表分为单向循环链表与双向循环链表:
- 单向循环链表:尾节点的
next指针指向头节点,无需遍历即可找到任意节点的后继,常用于解决单向链表无法快速访问尾节点的问题 - 双向循环链表:每个节点带有前驱与后继指针,尾节点的
next指向头节点,头节点的prior指向尾节点,支持双向遍历,常用于实现双向队列。 考研常考循环链表的判空、判尾条件,以及应用场景分析。
6. 栈的两种栈顶指针设置方式
栈是后进先出的线性结构,栈顶指针的两种常见实现:
- 栈顶指针指向栈顶元素的下一个位置:初始状态
top = 0,入栈时先存储元素再top++,出栈时先top--再取出元素,栈空条件为top == 0,栈满条件为top == maxSize - 栈顶指针指向栈顶元素本身:初始状态
top = -1,入栈时先top++再存储元素,出栈时先取出元素再top--,栈空条件为top == -1,栈满条件为top == maxSize -1考研常考选择题区分两种实现的栈空栈满条件,以及代码实现细节。
7. 循环队列的判空判满实现
循环队列用于解决顺序队列的假溢出问题,常见三种实现方式:
- 牺牲一个单元法(考研最常考):栈满条件为
(rear + 1) % maxSize == front,栈空条件为front == rear,牺牲的单元用于区分空与满的状态 - 计数器法:设置一个计数器
count,count == 0时为空,count == maxSize时为满 - 标记法:设置
tag标记,0表示上次操作是出队,1表示上次操作是入队,当front == rear && tag == 0为空,front == rear && tag ==1为满。 常考选择题给出循环队列的front与rear值,判断队列中元素个数。
8. 前缀、后缀表达式转换与求值
这是考研408的高频考点,难点在于转换规则与求值顺序:
- 中缀转后缀(逆波兰式):借助栈实现,规则为:
- 遇到操作数直接输出
- 遇到运算符:弹出栈中优先级大于等于当前运算符的运算符,再将当前运算符压栈;遇到左括号直接压栈,遇到右括号则弹出栈中元素直到左括号(左括号不输出)
- 遍历结束后弹出栈中剩余的所有运算符
- 后缀表达式求值:借助栈实现,遇到操作数压栈,遇到运算符弹出两个栈顶元素(注意:后弹出的是左操作数),计算结果后压栈,最终栈顶元素即为结果
- 前缀表达式(波兰式):与后缀类似,仅遍历方向相反,从右向左扫描求值。 常考手工转换与求值的选择题、简答题。
9. 数组与矩阵的下标存储地址计算
- 一维数组:
LOC(i) = LOC(0) + i * sizeof(ElemType) - 二维数组:
- 行优先:
LOC(i,j) = LOC(0,0) + (i * n + j) * sizeof(ElemType)(n为列数) - 列优先:
LOC(i,j) = LOC(0,0) + (j * m + i) * sizeof(ElemType)(m为行数)
- 行优先:
- 特殊矩阵压缩存储:对称矩阵、三角矩阵仅存储下三角/上三角元素,稀疏矩阵采用三元组表或十字链表存储,考研常考特殊矩阵的地址计算公式。
问题与反思
- 对循环队列判空判满的三种实现逻辑容易混淆,尤其是牺牲单元法与计数器法的适用场景需要进一步明确
- 前缀后缀表达式转换时,运算符优先级的判断与栈的弹出规则还不够熟练,偶尔会出现操作数顺序错误
- 特殊矩阵(如对称矩阵、三角矩阵)的压缩存储地址计算公式容易记错,需要重新推导巩固
- 单链表已知目标节点的O(1)插入删除场景容易忽略,需要结合经典例题再梳理细节
收获与总结
- 完整系统复盘了数据结构开篇章节的核心考点,明确了算法与程序的本质区别,掌握了大O复杂度的推导方法与常见阶数排序
- 理清了线性表顺序存储与链式存储的操作复杂度差异,明确了不同操作场景下的最优时间复杂度
- 掌握了栈与队列的核心实现细节,包括栈顶指针的两种设置方式、循环队列解决假溢出的原理与判空判满规则
- 熟练掌握了中缀、前缀、后缀表达式的转换与求值方法,能够快速完成表达式的手工转换与计算
- 明确了二维数组行优先与列优先的存储地址计算规则,掌握了特殊矩阵的压缩存储方法与地址推导逻辑
💡 碎碎念:踏实吃透每一个知识点!
文档内容由 AI 辅助生成
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
考研专业课学习记录2026-06-08
https://elysiaweb.vercel.app/posts/408/6-8/ 部分信息可能已经过时
相关文章 智能推荐