考研408计算机学科专业基础综合 数据结构复习

考研408计算机学科专业基础综合 数据结构复习

第一页:数据结构(一)------基础+线性表(高频)

一、数据结构核心基础(必背)

1. 数据结构定义 :相互之间存在一种或多种特定关系的数据元素的集合,包括逻辑结构 (集合、线性、树形、图状)和物理结构(顺序存储、链式存储),核心是"结构与操作的匹配"。

2. 算法定义与特性:解决特定问题的有限步骤集合,特性(必背):有穷性、确定性、可行性、输入(≥0)、输出(≥1)。

3. 算法复杂度:高频考点,重点掌握计算方法

① 时间复杂度:算法执行语句的频度,只保留最高阶项(如O(n²)、O(nlog₂n)),忽略常数和低阶项;

② 空间复杂度:算法执行所需额外存储空间(不包括输入输出数据),分为原地工作(O(1))和需要额外空间(如O(n));

③ 高频复杂度场景:冒泡排序O(n²)、快速排序O(nlog₂n)、二分查找O(log₂n)。

二、线性表(高频考点,每年必考)

1. 线性表定义:n个数据元素的有限序列,特点:元素有序、每个元素有唯一前驱和后继(除首尾)。

2. 顺序表(顺序存储)

① 存储方式:用连续的存储空间存储元素,下标从0开始;

② 核心操作(必背实现思路):插入(平均O(n),需移动元素)、删除(平均O(n))、查找(按值O(n),按位O(1));

③ 优点:随机访问快、存储密度高;缺点:插入删除效率低、扩容麻烦。

3. 链表(链式存储)

① 分类:单链表(只有后继指针)、双链表(有前驱+后继指针)、循环链表(首尾相连);

② 核心操作(必背):单链表插入(找到前驱节点,修改指针)、删除(找到前驱节点,断开指针)、遍历(O(n));

③ 优点:插入删除效率高(O(1),找到节点后)、无需扩容;缺点:随机访问慢(O(n))、存储密度低(需存指针)。

4. 高频考点:单链表逆置、双链表插入删除、循环链表判空/判满、顺序表与链表的对比(选择题必考)。

第二页:数据结构(二)------栈、队列、串(高频)

三、栈(高频,选择+大题必考)

1. 栈的定义:先进后出(LIFO)的线性表,只允许在栈顶进行插入(push)和删除(pop)操作。

2. 存储方式

① 顺序栈:用数组实现,栈顶指针top(初始-1,栈满top=maxsize-1);

② 链栈:用单链表实现,栈顶为表头,无需考虑栈满(除非内存不足)。

3. 核心应用(必背)

① 表达式求值(后缀表达式,大题高频);② 括号匹配(选择题高频);③ 递归调用(栈保存递归上下文);④ 进制转换。

4. 易错点:顺序栈的栈满/栈空判断、链栈的插入删除方向(栈顶为表头,插入在表头)。

四、队列(高频,选择题为主)

1. 队列的定义:先进先出(FIFO)的线性表,只允许在队尾插入(enqueue)、队头删除(dequeue)。

2. 存储方式

① 顺序队列:用数组实现,队头front、队尾rear(初始0),存在"假溢出"问题;

② 循环队列(重点):解决假溢出,队满条件(rear+1)%maxsize == front,队空条件front == rear;

③ 链队列:用单链表实现,队头为表头,队尾为表尾,无需考虑队满。

3. 核心应用:进程调度(操作系统联动)、缓冲队列、广度优先搜索(BFS,与图联动)。

五、串(低频但必背,选择题为主)

1. 串的定义:由零个或多个字符组成的有限序列(区别于线性表,元素是字符)。

2. 串的存储:定长顺序存储、堆分配存储、块链存储(了解即可)。

3. 高频考点:串的模式匹配算法(必背)------

① 暴力匹配(BF算法):时间复杂度O(mn),简单但低效;

② KMP算法(重点):时间复杂度O(m+n),核心是求next数组,避免回溯主串(无需背代码,掌握next数组求解方法和匹配过程)。

第三页:数据结构(三)------数组、矩阵、广义表(低频,抓重点)

六、数组(低频,选择题为主)

1. 数组的存储:行优先(C语言)、列优先(Fortran语言),重点掌握二维数组地址计算(必背)。

① 二维数组a[m][n],行优先存储:a[i][j]的地址 = 基地址 + (i*n + j)*每个元素所占字节数;

② 列优先存储:a[i][j]的地址 = 基地址 + (j*m + i)*每个元素所占字节数。

七、矩阵(高频考点,选择题+大题)

1. 特殊矩阵存储(重点)

① 对称矩阵:只存储上三角或下三角元素,节省空间,地址计算(如下三角矩阵:k = i*(i+1)/2 + j);

② 三角矩阵:上三角(下三角全为0)或下三角(上三角全为0),存储方式同对称矩阵,额外存储一个常数(0的区域);

③ 稀疏矩阵:非零元素极少,存储方式(必背):三元组表(行、列、值)、十字链表(了解即可)。

八、广义表(低频,了解核心)

1. 广义表定义:线性表的推广,元素可以是原子(单个元素)或子表(另一个广义表),如LS = (a, (b,c), d)。

2. 核心考点:广义表的深度(嵌套层数)、长度(最外层元素个数),如上述LS长度为3,深度为2。

第四页:数据结构(四)------树与二叉树(高频,必考)

九、树的基本概念(必背)

1. 树的定义:n≥0个节点的有限集合,n=0为空树,n≥1时存在一个根节点,其余节点分为若干个互不相交的子树。

2. 核心术语(必背)

① 节点的度:节点拥有的子树个数(叶子节点度为0,根节点度为子树个数);

② 树的度:树中所有节点的最大度;

③ 深度(高度):根节点深度为1,叶子节点深度为树的高度;

④ 层次:根节点为第1层,依次向下递增。

3. 树的性质(必背,选择题高频)

① 树中节点总数 = 所有节点的度之和 + 1;

② 度为k的树,第i层最多有k^(i-1)个节点;

③ 高度为h的k叉树,最多有(k^h - 1)/(k-1)个节点。

十、二叉树(核心,每年必考)

1. 二叉树定义:每个节点最多有2个子树(左子树、右子树),有序(左、右子树不能交换)。

2. 二叉树的性质(必背)

① 第i层最多有2^(i-1)个节点;

② 高度为h的二叉树,最多有2^h - 1个节点(满二叉树);

③ 任意二叉树,叶子节点数 = 度为2的节点数 + 1(n0 = n2 + 1);

④ 完全二叉树:除最后一层外,每一层节点数都满,最后一层节点从左到右连续(重点,地址计算)。

3. 二叉树的存储

① 顺序存储:适用于完全二叉树,节点i的左孩子2i,右孩子2i+1,父节点i/2(向下取整);

② 链式存储(二叉链表):每个节点有数据域、左指针(lchild)、右指针(rchild),重点掌握结构定义和遍历。

4. 二叉树的遍历(必背,大题高频)

① 前序遍历(根→左→右);② 中序遍历(左→根→右);③ 后序遍历(左→右→根);④ 层序遍历(按层次,从上到下、从左到右,用队列实现);

⑤ 高频考点:根据两种遍历序列(如前序+中序)还原二叉树(大题必考)。

第五页:数据结构(五)------树的应用+图(高频,必考)

十一、树的应用(高频)

1. 哈夫曼树(最优二叉树,必背)

① 定义:带权路径长度(WPL)最小的二叉树,权值越大的节点离根越近;

② 构造方法(哈夫曼算法):每次选两个权值最小的节点,合并为一个新节点,新节点权值为两者之和,重复直到只剩一个节点;

③ 应用:哈夫曼编码(前缀编码,无歧义,用于数据压缩)。

2. 二叉排序树(BST,高频)

① 定义:左子树所有节点值 < 根节点值,右子树所有节点值 > 根节点值,左右子树也为二叉排序树;

② 核心操作:插入(按大小插入,保持排序特性)、删除(分叶子节点、度为1、度为2节点,重点)、查找(平均O(log₂n));

③ 易错点:二叉排序树的查找效率与树的高度相关,最坏情况(单支树)O(n)。

3. 平衡二叉树(AVL树,高频)

① 定义:左右子树高度差(平衡因子)的绝对值 ≤ 1,平衡因子=左子树高度-右子树高度;

② 失衡调整(必背):LL型、RR型、LR型、RL型,掌握旋转方法(无需背代码,掌握旋转逻辑)。

十二、图(核心,每年必考,选择+大题)

1. 图的基本概念(必背)

① 定义:由顶点集V和边集E组成(G=(V,E)),分为无向图(边无方向)、有向图(边有方向);

② 核心术语:顶点的度(无向图:边数;有向图:入度+出度)、路径(顶点序列)、环(起点=终点的路径)、连通图(任意两顶点可达)、强连通图(有向图,任意两顶点相互可达)。

2. 图的存储(必背,大题高频)

① 邻接矩阵:n×n矩阵,a[i][j]=1表示顶点i和j有边,0表示无边,优点:查询快(O(1)),缺点:空间复杂度O(n²)(适合稠密图);

② 邻接表:每个顶点对应一个链表,存储其邻接顶点,优点:空间复杂度O(n+e)(适合稀疏图),缺点:查询慢(O(n))。

3. 图的遍历(必背,大题高频)

① 深度优先搜索(DFS):用栈实现,优先访问当前顶点的邻接顶点,再回溯(类似树的前序遍历);

② 广度优先搜索(BFS):用队列实现,按层次访问,先访问当前顶点的所有邻接顶点,再依次访问它们的邻接顶点(类似树的层序遍历)。

第六页:数据结构(六)------图的应用+排序(高频,必考)

十三、图的应用(必背,大题高频)

1. 最小生成树(MST,必考)

① 定义:连通图中,权值和最小的生成树(无环,包含所有顶点);

② 算法(必背):

  • Prim算法:从一个顶点出发,逐步添加权值最小的边,适合稠密图,时间复杂度O(n²);

  • Kruskal算法:按边的权值从小到大排序,依次添加不形成环的边,适合稀疏图,时间复杂度O(eloge)。

2. 最短路径(必考)

① Dijkstra算法:求单源最短路径(从一个顶点到其他所有顶点),不能处理负权边,时间复杂度O(n²);

② Floyd算法:求所有顶点之间的最短路径,可处理负权边(不能有负权环),时间复杂度O(n³);

③ 高频考点:两种算法的实现思路、步骤,能手动计算最短路径。

3. 拓扑排序(高频,有向图)

① 定义:对有向无环图(DAG)的顶点进行排序,使得对于每一条有向边(u→v),u在排序中位于v之前;

② 算法: Kahn算法(用队列,删除入度为0的顶点,更新邻接顶点入度)、DFS拓扑排序(后序遍历逆序);

③ 应用:任务调度、课程安排(避免循环依赖)。

十四、排序(必考,选择+大题,重点掌握)

1. 排序分类

① 稳定排序:冒泡、插入、归并、基数排序;② 不稳定排序:选择、快速、希尔、堆排序;

③ 内部排序:所有数据在内存中排序;④ 外部排序:数据量大,需借助外存(了解即可)。

2. 高频排序算法(必背实现思路、复杂度、稳定性)

① 冒泡排序:相邻元素比较,逆序则交换,O(n²),稳定;

② 插入排序:将元素插入已排序序列,O(n²),稳定;

③ 快速排序(重点):选基准元素,分区(小于基准放左,大于放右),递归排序,O(nlog₂n),不稳定,最坏O(n²);

④ 归并排序(重点):分治思想,将序列分成两半,分别排序,再合并,O(nlog₂n),稳定;

⑤ 堆排序(重点):构建大根堆/小根堆,每次取出堆顶元素,调整堆,O(nlog₂n),不稳定;

⑥ 希尔排序:插入排序的改进,按步长分组排序,O(n^1.3),不稳定。

3. 高频考点:排序算法的时间/空间复杂度、稳定性对比(选择题必考)、快速排序的分区过程、归并排序的合并过程(大题必考)。

相关推荐
羊小猪~~3 小时前
LLM--SFT简介
python·考研·算法·ai·大模型·llm·微调
AnalogElectronic3 小时前
考研408计算机学科专业基础综合——操作系统复习
考研
AnalogElectronic3 小时前
考研408计算机学科专业基础综合——计算机网络复习
计算机网络·考研
Book思议-3 小时前
【数据结构】二叉树非递归前中后序遍历详解
数据结构·二叉树非递归前中后序遍历
计算机安禾3 小时前
【数据结构与算法】第24篇:哈夫曼树与哈夫曼编码
c语言·开发语言·数据结构·c++·算法·visual studio
郝学胜-神的一滴4 小时前
[力扣 20] 栈解千愁:有效括号序列的优雅实现与深度解析
java·数据结构·c++·算法·leetcode·职场和发展
AnalogElectronic4 小时前
考研408计算机学科专业基础——计算机组成原理复习
考研
Yzzz-F4 小时前
Problem - 2148F - Codeforces[字符串后缀排序]
数据结构·算法
Kethy__4 小时前
计算机中级-数据库系统工程师-数据结构-树与二叉树(1)
数据结构·算法··数据库系统工程师·计算机中级