单链表(链式存储结构)插入
![](https://img.haomeiwen.com/i7186975/a6d07ec27fd0077e.png)
单链表(链式存储结构)删除
![](https://img.haomeiwen.com/i7186975/4b00a750bd13d4b3.png)
有头结点的单链表
在开始结点前插入元素
等同在头结点后插入元素
![](https://img.haomeiwen.com/i7186975/6638bbc0af8f7f14.png)
不含头结点的单链表
在开始结点前插入元素
![](https://img.haomeiwen.com/i7186975/9def791c6675658a.png)
s->next = head;
head = s;
因此含有头结点的单链表比不含头结点的单链表在操作上简单
就是因为含有头结点的单链表在任何位置上插入新元素都是统一的操作
而不含有头结点的单链表需要分两种情况讨论
多了一些麻烦
含有头结点单链表的删除
![](https://img.haomeiwen.com/i7186975/0ce0c693580f5a64.png)
不含头结点单链表的删除
![](https://img.haomeiwen.com/i7186975/8cc008b204848162.png)
![](https://img.haomeiwen.com/i7186975/49cb9c050a511810.png)
双链表的结点插入
![](https://img.haomeiwen.com/i7186975/1a03d739a33f07c5.png)
首先必须要先保存p->next到s->next(防止断链)
后面的依照链表的正确结构 随便连
双链表的结点删除
![](https://img.haomeiwen.com/i7186975/79b372f40b1114ee.png)
双链表要删除一个结点 仅仅知道这个结点的地址信息即可
相邻的地址信息在这个结点内部存着 不需要额外的指针指出来
顺序表的插入
![](https://img.haomeiwen.com/i7186975/92804dc11aaef663.png)
![](https://img.haomeiwen.com/i7186975/4eb4eb8128082abf.png)
注意更新length的值 让它的值能正确反应当前所存的线性表的长度
![](https://img.haomeiwen.com/i7186975/2e2b5bda6674fdc1.png)
![](https://img.haomeiwen.com/i7186975/4148c2d192e685aa.png)
![](https://img.haomeiwen.com/i7186975/a92b27dce9b80e48.png)
p是插入的位置
e是插入的元素
判断插入位置是否合法 (即0~length)
判断插入时机是否合法 (即length<maxSize时)
失败返回0 成功返回1
顺序表的删除
![](https://img.haomeiwen.com/i7186975/1a2a31b7dc72a3e1.png)
![](https://img.haomeiwen.com/i7186975/f3262974d327a07a.png)
这里若强行设length为3
![](https://img.haomeiwen.com/i7186975/4e491bdf3bfed978.png)
那么现在这个顺序表元素有哪几个?
只有0、1、2
其他虽然也在数组中 但是已经不属于顺序表的元素了
0~length-1这个下标范围才是顺序表中元素所在范围
除此之外都不算顺序表中的元素
所以我如果想将顺序表清0
直接让length=0即可
虽然那些元素还留在数组中 但是对一个顺序表来说 是不可见的。
![](https://img.haomeiwen.com/i7186975/24e83fce95efd91c.png)
![](https://img.haomeiwen.com/i7186975/516d5d9f87fe0286.png)
length=0不合法 这个条件已经包含在了前面两个条件中
int &e 我们需要这个被删除元素的值
需要通过这个函数把值改变掉
因此定义为引用型
网友评论