跟了几节王道课,发现在解决线性表问题时我们只需要形象地画出该线性表即可更好、更快地解决问题,对于考研者和数据结构初学小白来说很适用!
1、认识线性表
线性表:由n个数据元素组成的有限序列
线性表由存储结构分为:顺序存储和链式存储
线性表的顺序存储结构称为顺序表(具有随机和顺序存取特性),如:数组
线性表的链式存储结构称为链表(具有顺序存取特性),如:链队列、链栈
2、顺序表
因为具有随机存取特性(当做数组),因此便于查找,不利于删除和插入
3、单链表
在插入和删除时只需改变指针,所以更方便(比如删除a1,我们把头结点next指针指向a2即可)
4、双链表
5、循环单链表
也称单向循环链表
6、循环双链表
也称双向循环链表
这样观察更准确:
关于head指针和rear指针等等,我们只需要在题目给出的情况下加上,而链表中指针的功能是指向下一个元素的地址
7、一道例题
参考于李春葆数据结构,研究透该题,做选择题一般就不会有任何问题了。(此处建议画图自行过一遍)
注意:我在之前写单链表删除、插入操作时只需要改变指针,时间复杂度O(1);这里可以看出这些链表的插入和删除时间复杂度O(n),这是因为本题在考虑插入和删除前,要找到该元素,所以这应该是查找花费的时间,所以在考试时处理该种问题根据具体情况来看。
8、题目1
本题虽然是删除和插入,但是依照题目需求要考虑查找的时间。
(1)
(2)
转化:找倒数最后(插入)和倒数第二个(删除)元素O(1)
9、题目2
加了蛮多计算机考研群,这种类型的题目对于跨考或者C语言基础不好的同学来说一般都是一脸懵逼,其实我们根据题目画出图像大致分析一下答案就出来了。
(1)
(2)