写在前面
大二上学期开设了数据结构这门课程,听老师说这门课程不太好学
对于我这种脑子不太好使的来说,更要多多付出
老师上课会雨课堂出一些练习题,决定把易错,易混的题目和知识点记录下来,便于期末复习什么的加深印象~
另外对于遇到的有价值的题也会记录,巩固知识,持续更新~
虽然我走得很慢,但我仍在前进!
目录
- 第一章-绪论
- 第二章-线性表
- 顺序存储
- 链式存储
- 第三章-栈和队列
- 第五章-数组和广义表
- 第六章-树
- 第七章-图
- 第九章-查找
- …
开始
第一章-绪论
答案:C
- 逻辑结构:集合、线性结构、树形结构、图形或网状结构
注意:逻辑结构和计算机、语言不相干
存储结构是 数据 逻辑结构 用 计算机语言的 实现 - 存储结构:顺序存储结构、链式存储结构、索引存储、散列存储(Hash表)
注意:
- 逻辑结构中的线性结构有包括:线性表、栈、队列、串、数组等
- 循环队列是顺序存储结构。链式存储没有大小,没有循环之说,所以循环队列默认指顺序存储结构,如果说是队列(统称)应该也是与存储结构无关的术语。
- 一种数据的逻辑结构,可以用多种存储结构来实现
如上面2图 - 只要带有‘顺序’、‘链式’等字样的就要注意 是否与存储结构有关
第二章-线性表
线性表-顺序存储结构
关于课本上的一些算法,已经基本实现于往期实验博客:
数据结构实验1_C语言_输入集合A和B求并集、交集、差集(while + switch + 功能函数))
数据结构实验2_C语言_基于顺序表的非递减有序表的合并、线性表元素的增、删、改、查(while +switch + 功能函数)
线性表-链式存储结构
我认为选B,因为就是下一个元素的下标,静态数组—》类链表
- B:虽然可以直接获取第一个元素,但是想要 获得 最后一个元素,需要遍历整个链表
- D:可以直接得到最后一个元素,因为是循环链表,想要得到第一个元素只需要在遍历一个元素就可以
- 对于双链表 的优势,可以看下图
不能出现 大 小 中 的循序
循环链表是 尾结点的next指向头结点 (或者第一个节点)
即可以理解为 是不是需要遍历
第三章-栈和队列
3.1 栈
需要注意C和E
C是当为n个元素,再!做进栈操作,然后就上溢
E情况就类似上面的图(默认剩余预留一个空间的时候为满)
3.2队列
针对循环队列
第四章-串
第五章-数组和广义表
分析:
对于n行n列的下三角矩阵,元素个数为 1 + 2 + 3 + ... + n-1 + n = n(n + 1) / 2
存储数组的下标 和 元素 在矩阵中的位置 之间有一些关系:
对于处于i 行 j 列
的元素a
上面共有i - 1
行,上面行元素总数为 (i - 1)(i - 1 + 1) / 2
即 i (i - 1) / 2
个
然后在加上此行的 前面的j
个
有 i (i - 1) / 2 + j
个
第六章-树
递归的输出每个元素都需要进栈
- 法1
可根据最后一个节点 为 1001 ,为奇数,推出 其父节点为500 (2 * 500 + 1 = 1001)
得出度 为 2 的 最后一个结点为 500
所以度为2的结点 个数为 500—》叶子节点为 501
- 法2
(总结点数 - 一个根节点 ) / 2 ,(1001 - 1)/ 2 = 500
,看看有多少对,就有多少个 度 为 2 的节点,即500
第七章-图
一条边对应两个顶点
7.1图的生成树
可能存在 权值 相等的情况
7.2邻接矩阵和邻接表
注意是 任何情况
第九章-查找
慢慢画出来即可
关于课本上的一些算法实现稍后会更新…