单链表的插入和删除_从0开始的编程之梦——数据结构之单链表的基本运算

一、求带有头结点的单链表长度

算法思路:沿带头节点单链表L的首元结点计数统计单链表长度

算法描述:

  1. 顺链头开始,计数器j初值为0;当前指针p指向链表L的首元结点 p=L—>next
  2. p依次往后(计数j++)直到表尾(p=NULL)
74a9f0283e0f6d8b48eb4aff6d8eab3b.png

二、建立空表

InitList(LinkList *L)/*建立空表*/

L=(LinkList)malloc(sizeof(Node));/*建立头结点*/

L->next=NULL;/*建立空的单链表*/

(一)、头插法建表

算法描述:

已知空链表L,依次读入结点数据头插入,直到读入结束标志为止。

每插入一个结点到表头的步骤:

  1. 生成新结点s
  2. 将结点s插入到首元结点之前,即表头结点之后;
5c36ed0da38b612eb261f3f622c57bb0.png

(二)、尾插法建表

算法描述:已知空链表L,设置尾指针r指向当前表尾

依次读入结点数据尾插入,直到读入结束标志时将表尾结点链域置空

每插入一个结点到表尾的步骤:

  1. 生成新结点s
  2. 将结点s插入到表尾r结点之后,该结点作为当前表尾结点;
b9a6463920c170d551382e48417c0bac.png

三、单链表的查找

(一)、按序号查找

算法描述:

  1. 从头查找 当前指针p指向表头L;
  2. 顺链计数 表未查完且未找到,则计数器j加1,p指针后移;
  3. 结果判断 如找到第i个结点,则返回结点p;如表查完未找到,则返回空。
06517dca8cdac654dd46c057c447ec06.png

(二)、按值查找

算法描述:

  1. 从表头开始,p指向链表L首元结点 p=L->next;
  2. 当表未查完时,若当前结点值不为key,则指针p后移;比较当前结点值为key,则跳出循环
  3. 结束返回p指针的位置
98dc3336d724ebe2123481f388da1353.png

四、单链表的插入

算法描述:

1.确定第i-1个结点的位置(可用按序号查找)

2.申请新结点

3.插入挂链:新结点s插至第i-1个结点之后;

S结点的后继指向第i个结点 S->next=pre->next

第i-1个结点的指针指向s pre->next=s


五、单链表的删除

算法描述:

1.确定第i-1个结点的位置p(同按序号查找算法)

2.删除并释放第i个结点

指针r指向被删结点 r=p->next

删除第i个结点r p->next=r->next

释放r结点 free(r)

02a97f566b0f19b9732ab421b83a85ec.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值