参考资料
代码随想录-链表
(一)顺序存储结构
List :零个或多个数据元素的有限序列
1.线性表相关操作:
操作名称 | |
---|---|
InitList(*L) | 初始化操作,建立一个空的线性表 |
ListEmpty(L) | 线性表为空true,否则返回false |
ClearList(*L) | 将线性表清空 |
GetElem(L,i,*e) | 将线性表L中的第i个位置元素返回给e |
LocateElem(L,e) | 在线性表中查找给定值e相等的元素,查找成功返回元素在表中的序号 |
ListInsert(*L,i,e) | 在线性表L中的第i个位置插入新元素e |
ListDelete(*L,i,e) | 删除线性表L中第i个位置元素,并用e返回其值 |
LisLength(L) | 返回线性表L元素个数 |
2.线性表的顺序存储结构
描述顺序存储结构三个属性:起始位置、最大存储容量、线性表当前长度
(1)插入操作
(2)删除操作
(二)线性表的链式存储结构
- 节点的定义
struct ListNode{
int val; //节点上存储的元素
ListNode *next; //指向下一个节点的指针
ListNode(int x):val(x),next(NULL){}//节点的构造函数
};
- 链表内功能
(1)单链表的读取
(2)单链表的插入
s->next = p->next->next;
p->next = s;
【两个代码的顺序不能交换】
(3)单链表的删除
q = p->next;
p->next = q->next;
在这里插入图片描述
3.整个链表的操作
(1)单链表的整表创建
顺序存储结构的创建,声明一个类型和大小的数组并赋值的过程;
(2)单链表的整表删除
4.其他类型的链表
循环链表:针对如何从当众一个节点出发,访问到链表的全部节点
双向链表:
插入操作
//插入操作
s->prior = p;
s->next =p->next;
p->next->prior = s;
p->next = s;
![在这里插入图片描述](https://img-blog.csdnimg.cn/f068b060c5e542498f7bb8b14f21df51.png
p->prior->next = p->next;
p->next->prior = p->prior;
free(p); //释放节点是容易忽视的点
(三)总结
- 线性存储结构和链式存储结构的对比