【1】3. 线性表的链式表示_单链表的插入和删除操作

目录

1. 按位序插入_带头结点

2. 按位序插入_不带头结点

指定结点的后插操作

指定结点的前插操作

3. 按位序删除_带头结点

指定结点的删除


1. 按位序插入_带头结点

【1】3. 线性表的链式表示_单链表的插入和删除操作_第1张图片

【1】3. 线性表的链式表示_单链表的插入和删除操作_第2张图片

这里讨论时 假设单链表中只有4个结点。

注意:这里和顺序表不同的地方 =>  对 i 的合法性用了一个 if 判断,以及 while 循环结束后对是否为 NULL 的判断。  因为链式表和顺序表不同点之一在于,链式表不支持随机存取,只能通过 next 指针遍历查找。

 

 

2. 按位序插入_不带头结点

【1】3. 线性表的链式表示_单链表的插入和删除操作_第3张图片

【1】3. 线性表的链式表示_单链表的插入和删除操作_第4张图片

 

考试中两种情况都会考察!   

 

 

指定结点的后插操作

【1】3. 线性表的链式表示_单链表的插入和删除操作_第5张图片

 

然后代码就可以修改成:

【1】3. 线性表的链式表示_单链表的插入和删除操作_第6张图片

 

 

 

指定结点的前插操作

【1】3. 线性表的链式表示_单链表的插入和删除操作_第7张图片

 

【1】3. 线性表的链式表示_单链表的插入和删除操作_第8张图片

 

 

 

3. 按位序删除_带头结点

ListDelete(&L,i,&e):删除操作,删除表L中第i个位置的元素,并用e返回删除元素的值

【1】3. 线性表的链式表示_单链表的插入和删除操作_第9张图片

 

 

指定结点的删除

要删除结点p ,还需要修改其前驱节点的 next 指针。

又由于单链表没办法往前检索,所以没办法找到其前驱结点。除非像上面代码,传入一个头指针,从链表头一次寻找p的前驱结点。第二种方法类似前插操作的偷天换日!

 

【1】3. 线性表的链式表示_单链表的插入和删除操作_第10张图片

 

但是如果要删除的是单链表的最后一个结点的话,上面代码中的 p->data = p->next->data 会出现问题。这种情况只能从表头一次寻找,知道找到其前驱结点。考试时,迫不得已写这个,最多扣一分!!

 

这些代码都要会写,都重要!!!

打牢基础。慢慢加速!!!!

体会封装的好处!!!

你可能感兴趣的:(C&&C++)