参考网课数据结构-青岛大学-王卓-第三周
参考书籍《数据结构C语言版第二版》 中国工信出版集团 人民邮电出版社出版 严蔚敏 编著
线性表的链式存储
单链表,双链表,循环链表
头指针,头结点,首元节点
在链表中设计头结点有什么好处?
1.在处理首元节点的变化会比较方便——与其他位置一致。
2.便于非空表和空表的统一处理——头指针都是指向头结点的非空指针。
链表的储存结构特点
- 顺序存取法(对比随机存取法):只能从前往后找,越往后访问越慢。
- 数据域+指针域
单链表的类型定义和变量定义
类型定义
嵌套定义:自己的定义包含了自己。自己:struct Lnode
typedef
: 重新起名字
变量定义
单链表通常如下定义(具体例子 )
为了统一链表操作,通常如下定义:
这样定义的想法是先定义一个ElemType
,再结合ElemType
加上指针域定义链表,而不是吧二者直接全部写到链表里面。
单链表基本操作的实现
单链表的初始化(C++的写法)
补充算法1-判断链表是否为空
补充算法2-单链表的销毁
->
表示结构体指针。即当有一个指向某个结构体的指针p
后,想要把结构体中的a
赋值给变量x
,则可以写:
x=p->a
L=L->next //把节点指针进行后移
p=L->next //让指针p指向首元节点
p=L //让指针p指向头节点
上面三个有注释的操作非常重要
补充算法3-清空链表
需要用到两个指针,在其中一个指针删除对应的内容之前,要让这个指针指向的节点的next部分存出来,不然执行删除之后就找不到下一个节点了。
补充算法4-求单链表表长
取值-取单链表中第 i 个元素
按值查找-返回地址
按值查找-返回位置序号
插入-在指定标号节点前
注意insert时候赋值顺序不能换,先接上后边的表,再接上前面。如果调换顺序需要多定义一个变量作为中间变量。
删除-删除指定节点
单链表查找,插入,删除的时间效率分析
单链表的建立-头插法
此处重要!(关于插入到表头的代码的解释)
p->next=L->next;
L->next=p;
含义解释:先把上一个节点的指针域赋值给新节点的指针域;
再将上一个节点的指针域写入为新节点的地址。
单链表的建立-尾插法
时间复杂度O(n),关于重点详见注释,注意操作顺序。