数据结构 第 1~4 章 名词库
每条最多四行:是/不是/易混/范围。
建设进度:✅ 第 1 章 绪论 ✅ 第 2 章 线性表 ✅ 第 3 章 栈、队列和数组 ✅ 第 4 章 串 (四章完整)
1.1 数据结构的基本概念
数据元素 / 数据项
- 是:数据元素是数据的基本单位;数据项是构成数据元素的不可分割的最小单位。
- 易混:「基本单位」≠「最小单位」。一条学生记录是数据元素,学号、姓名是数据项。
数据对象
- 是:具有相同性质的数据元素的集合,是数据的一个子集。
抽象数据类型(ADT)
- 是:一个数学模型及定义在该模型上的一组操作,常用(数据对象,数据关系,基本操作集)三元组表示。
- 范围:可以定义一个完整的数据结构。
数据结构三要素
- 是:逻辑结构、存储结构、数据的运算。
- 范围:缺一不可。
逻辑结构
- 是:数据元素之间的逻辑关系,独立于存储结构,与计算机无关。
- 范围:线性结构(线性表、栈、队列、串、数组);非线性结构(集合、树、图)。
- 易混:有序表是逻辑结构;顺序表、哈希表、单链表是完整的数据结构。
存储结构(物理结构)
- 是:数据结构在计算机中的表示,既表示元素,也表示元素之间的关系。
- 不是:不能独立于逻辑结构;它依赖于计算机语言。
- 范围:顺序、链式、索引、散列四种。
顺序存储 / 链式存储
- 是:顺序存储靠存储单元的邻接关系表示逻辑关系;链式存储靠指针。
- 范围:顺序存储可随机存取,但可能产生较多外部碎片;链式存储不会出现碎片,但只能顺序存取。
索引存储 / 散列存储
- 是:索引存储另建索引表,索引项为(关键字,地址);散列存储由关键字直接计算地址。
- 范围:索引检索快,但增删要改索引表;散列增删查都快,但会冲突。
数据的运算
- 是:运算的定义针对逻辑结构(功能);运算的实现针对存储结构(步骤)。
1.2 算法和算法评价
算法
- 是:对特定问题求解步骤的一种描述,是指令的有限序列。
- 范围:五个特性——有穷性、确定性、可行性、输入、输出。
有穷性 / 确定性 / 可行性
- 是:有穷步后结束且每步有穷时间;相同输入只能得到相同输出;操作可由已实现的基本运算执行有限次实现。
- 易混:可读性、健壮性、正确性是**「好」算法的设计目标**,不是特性。
输入 / 输出
- 范围:输入零个或多个;输出一个或多个。
频度
- 是:一条语句在算法中被重复执行的次数。所有语句的频度之和记为
。
时间复杂度
- 是:基本运算(最深层循环内的语句)执行次数的数量级,
。 - 不是:不是 CPU 时间;
也不表示问题规模是 。 - 范围:依赖问题规模
和输入数据的初始状态。
最坏 / 平均 / 最好时间复杂度
- 是:平均时间复杂度指所有可能输入等概率出现时的期望运行时间。
- 范围:一般考虑最坏情况。
加法规则 / 乘法规则
- 是:并列取
;嵌套取 。 - 易混:内层次数依赖外层变量时不能直接相乘,要求和(2022 为
)。
空间复杂度
- 是:算法所需的存储空间,
。 - 范围:只分析除输入和程序之外的额外空间。
原地工作
- 是:算法所需的辅助空间为常量,即
。 - 不是:不是「不需要任何辅助空间」。
2.1~2.2 线性表与顺序表
线性表
- 是:具有相同数据类型的
个数据元素的有限序列。 - 不是:不是存储结构。顺序表、链表才是存储结构。
- 范围:
为空表;表头无前驱,表尾无后继。
位序
- 是:元素
在线性表中的序号 ,从 1 开始。 - 易混:数组下标从 0 开始,位序
的元素是 data[i-1]。
顺序表
- 是:用一组地址连续的存储单元依次存储线性表,逻辑顺序与物理顺序相同。
- 范围:
,随机存取。
随机存取 / 顺序存取
- 是:随机存取指访问序号为
的元素的时间与 无关, ;顺序存取指只能从表头依次访问。 - 易混:顺序表是「顺序存储、随机存取」的结构。
静态分配 / 动态分配
- 是:静态分配数组大小固定,满了就溢出;动态分配满了就另开更大的空间整体拷贝。
- 不是:动态分配不是链式存储,仍可随机存取。
顺序表的插入 / 删除
- 范围:插入
,移 个,平均 ;删除 ,移 个,平均 。
2.3 线性表的链式表示
头指针 / 头结点
- 是:头指针始终指向链表的第一个结点;头结点是带头结点的链表中第一个数据结点之前附加的结点。
- 范围:头结点的两个好处——首位置操作与其他位置一致;空表与非空表处理统一。
单链表判空
- 是:带头结点
L->next==NULL;不带头结点L==NULL。
头插法 / 尾插法
- 是:头插法新结点插在头结点之后,得到逆序;尾插法设尾指针
r,得到正序,最后r->next=NULL。
双链表
- 是:结点有
prior和next两个指针。 - 范围:插入
*s到*p后,s->next=p->next必须在p->next=s之前;两结点间插入改 4 个指针域。
循环单链表 / 循环双链表
- 是:尾结点的
next指向头结点;循环双链表的头结点prior还指向尾结点。 - 范围:判空
L->next==L;循环双链表判空L->prior==L && L->next==L。带头结点的循环单链表中没有空指针。 - 易混:循环单链表常只设尾指针,
r->next即头结点,表头表尾插入都是。
静态链表
- 是:用数组描述链式存储,
next是数组下标(游标)。 - 范围:预先分配连续空间,容量固定;
next==-1表示结束;插入删除不移动元素。 - 不是:不能随机存取第
个元素。
3.1 栈
栈
- 是:只允许在一端进行插入或删除操作的线性表,后进先出(LIFO)。
- 范围:栈顶是允许插入删除的一端;栈底固定。
出栈序列的个数
- 是:
个不同元素入栈,出栈序列共 个(卡特兰数)。 - 不是:不是
。 时是 5 个, 不可能。 - 范围:判定准则——在某元素之前入栈、却晚于它出栈的元素,必定按逆序出栈。
顺序栈 / 栈顶指针
- 是:用连续存储单元存放元素,附设
top指示栈顶位置。 - 范围:默认
top指向栈顶元素、初值,入栈 data[++top]=x;top指向下一位置时入栈data[top++]=x。 - 易混:出栈只移动指针,数据仍可能留在原单元(2009)。
共享栈
- 是:两个栈底设在共享空间两端,栈顶向中间延伸。
- 范围:栈满
top1-top0==1;只在整个空间占满时才上溢。 - 易混:降低的是上溢的可能,存取时间仍是
。
上溢 / 下溢
- 是:上溢是存储器满了还往里写;下溢是存储器空了还往外读。
链栈
- 是:用单链表实现的栈,所有操作在表头进行,教材规定没有头结点。
- 范围:不存在栈满上溢;入栈
x->next=top; top=x;。
3.2 队列
队列
- 是:只允许在一端插入(队尾)、另一端删除(队头)的线性表,先进先出(FIFO)。
- 易混:栈与队列的本质区别是插入、删除操作的限定不同,不是逻辑结构或存储结构。
假溢出
- 是:顺序队列
rear==MaxSize时无法入队,但数组中仍有空位置。 - 范围:循环队列就是为解决假溢出引入的。
循环队列
- 是:把顺序队列从逻辑上视为一个环,指针进 1 用
%MaxSize。 - 不是:不是用循环链表实现的队列,循环队列指顺序存储的队列。
- 范围:长度
(rear-front+MaxSize)%MaxSize;牺牲一个单元时队满(rear+1)%MaxSize==front,最多存MaxSize-1个。
链式队列
- 是:同时带队首指针和队尾指针的单链表,通常带头结点。
- 范围:带头结点时队空
front==rear;删除最后一个元素时rear=front。
双端队列
- 是:两端都可以插入和删除的线性表。
- 范围:输出受限——一端可进可出、另一端只能入;输入受限——一端可进可出、另一端只能出。
- 易混:2010、2021 都是输出受限。
时两种受限双端队列各能得到 22 种序列。
3.3 栈和队列的应用
括号匹配
- 是:左括号入栈,右括号与栈顶匹配后出栈;扫描完栈空才算匹配。
中缀 / 后缀 / 前缀表达式
- 是:后缀表达式(逆波兰式)运算符在操作数之后,不需要括号。
- 范围:中缀转后缀用运算符栈,界限符
(也占栈位;后缀求值用操作数栈,中间结果也占栈位。
递归工作栈
- 是:递归调用时系统用栈保存每一层的返回点、局部变量、传入实参。
- 范围:递归次数过多容易栈溢出;递归的效率不高,原因是包含很多重复计算。
队列的应用
- 范围:层次遍历、BFS;主机与打印机之间的缓冲区;多用户争用 CPU 时的就绪队列。
3.4 数组和特殊矩阵
数组
- 是:
个相同类型元素构成的有限序列,是线性表的推广。 - 范围:维数和维界定义后不再改变,只有存取、修改元素的操作。
行优先 / 列优先
- 是:
(行优先);列优先把 与 对调。
压缩存储 / 特殊矩阵
- 是:值相同的元素只分配一个空间,零元素不分配;特殊矩阵是相同元素或零元素分布有规律的矩阵。
- 范围:对称
;三角 ;三对角 , 。
稀疏矩阵 / 三元组
- 是:非零元素个数
元素总数 ;三元组为(行标,列标,值)。 - 范围:压缩后失去随机存取特性;三元组表可用数组或十字链表存储;还要保存行数、列数、非零元素个数。
4.1 串(*,不在统考大纲范围)
串
- 是:由零个或多个字符组成的有限序列。
- 易混:与线性表的区别仅在于数据对象限定为字符集;基本操作以子串为操作对象。
空串 / 空格串
- 是:空串长度为 0;空格串由一个或多个空格组成,长度为空格个数。
- 不是:空格串不是空串。
子串 / 主串 / 位置
- 是:子串是串中任意多个连续字符组成的子序列;子串的位置以其第 1 个字符在主串中的位置表示。
最小操作子集
- 是:
StrAssign、StrCompare、StrLength、Concat、SubString。 - 不是:
Index(定位)不在其中。
定长顺序存储 / 堆分配存储 / 块链存储
- 是:定长数组,超长被截断;堆分配仍是连续单元但动态分配;块链是每个结点存一个或多个字符的链表。
4.2 串的模式匹配
模式匹配
- 是:在主串中找到与模式串相同的子串,并返回其所在的位置。
- 易混:求子串是截取子串,不是模式匹配。
简单的模式匹配算法
- 是:失配时
i=i-j+2、j=1,主串指针回溯。 - 范围:最多
趟,每趟最多 次,最坏 ;一般情况下实际执行时间近似 。
前缀 / 后缀 / 部分匹配值(PM)
- 是:前缀是除最后一个字符外的所有头部子串;后缀是除第一个字符外的所有尾部子串;PM 是最长相等前后缀的长度。
- 范围:右滑位数 = 已匹配的字符数 − 对应的部分匹配值。
next 数组
- 是:
next[j]为模式串第个字符失配时跳到的位置, 。 - 范围:位序从 1 起时
next[1]=0、next[2]=1;从 0 起时整体减 1。2015、2019、2024 的王道解析都按位序从 0 算。
KMP 算法
- 是:失配时
不变、 ; 时 、 同时加 1。 - 范围:
;主要优点是主串不回溯,仅在部分匹配多时明显快于简单匹配。
nextval 数组
- 是:若
,把 next[j]修正为next[next[j]],直至不等。 - 范围:匹配算法不变;右滑距离
(2024)。
高频范围限定清单
| 说法 | 判定 |
|---|---|
| 「数据项是基本单位」 | 错。数据元素是基本单位,数据项是最小单位 |
| 「有序表是存储结构」 | 错。是逻辑结构 |
| 「顺序表是逻辑结构」 | 错。是完整的数据结构 |
| 「集合是线性结构」 | 错。非线性 |
| 「存储结构独立于逻辑结构」 | 错。逻辑结构独立于存储结构 |
| 「数据结构仅由逻辑结构和存储结构决定」 | 错。还有运算 |
| 「链式存储会产生碎片」 | 错。顺序存储才会产生外部碎片 |
| 「可读性是算法的特性」 | 错。是设计目标 |
| 「算法至少一个输入」 | 错。零个或多个 |
| 「 | 错。辅助空间与 |
| 「空间复杂度算上输入数据」 | 错。只算额外空间 |
| 「一般讨论平均时间复杂度」 | 错。一般考虑最坏 |
| 「两层循环一定 | 错。2014 为 |
| 「线性表是存储结构」 | 错。是逻辑结构 |
| 「顺序表是顺序存取结构」 | 错。是随机存取结构 |
| 「动态分配的顺序表是链式存储」 | 错。仍是顺序存储 |
| 「插入合法位置 | 错。 |
| 「插入、删除平均都移 | 错。删除是 |
| 「头结点的目的是让链表至少有一个结点」 | 错。是方便运算的实现 |
| 「结点内存储单元可以不连续」 | 错。结点内必须连续 |
| 「有尾指针就能 | 错。要找前驱,单链表 |
| 「建立有序单链表最低 | 错。 |
| 「双链表的优点是插入删除更方便」 | 错。是访问前后结点更灵活 |
「循环单链表判空 L->next==NULL」 | 错。L->next==L |
「head->next->next==head ⟹ 表长 1」 | 错。0 或 1 |
| 「静态链表可随机存取」 | 错。要按游标依次找 |
| 「 | 错。卡特兰数, |
| 「出栈后数据就被清除」 | 错。只移动 top |
| 「共享栈降低下溢」 | 错。降低上溢 |
| 「链栈的优势是插入删除容易」 | 错。是不会栈满 |
| 「栈和队列的区别是逻辑结构不同」 | 错。是操作的限定不同 |
| 「循环队列 = 循环链表实现的队列」 | 错。循环队列是顺序存储 |
「A[0…n] 的循环队列用 mod n」 | 错。mod (n+1) |
| 「链式队列出队只改头指针」 | 错。删最后一个元素时也改尾指针 |
| 「输出受限 = 一端只能出」 | 错。是一端只能入 |
| 「三对角矩阵需 | 错。 |
| 「稀疏矩阵压缩后仍可随机存取」 | 错。失去随机存取 |
| 「存稀疏矩阵只存三元组」 | 错。还要存行数、列数 |
| 「空格串是空串」 | 错。长度为空格个数 |
「Index 属于最小操作子集」 | 错。不属于 |
| 「简单模式匹配是 | 错。理论 |
| 「PM 是公共前后缀的个数」 | 错。是最长相等前后缀的长度 |
「next[j]=PM[j]+1」 | 错。 |
| 「KMP 失配时 | 错。 |
「nextval 改变匹配算法」 | 错。算法不变 |
「真题的 next 一律从 1 起」 | 错。2015/2019/2024 解析按从 0 起 |
| 「比较次数不算失配那一次」 | 错。失配也算 |
链接
- 🏠 返回总览:数据结构第 1~4 章总览
- 📕 附录入口:数据结构附录