c语言单链表基本操作

1、链表的定义:

物理存储上非连续,数据元素的逻辑顺序通过链表中的指针连接次序,实现一种线性存储结构。

特点:链表是由一系列节点(链表中的每一个元素都称为节点)组成,节点在运行时动态生成。每个节点包括俩个部分分别是数据域和指针域。

2、链表的构成:

每个节点一般采用结构体形式组织:

3、单链表的基本操作:

一般包括,创建链表,增删改查,遍历链表,排序,释放链表空间等。

(1)、创建链表

1、在主函数里面输入要创建链表的个数,并且循环分配空间,给每个空间进行赋值,调用自定义函数。

2、自定义函数里面先判断头节点是否为空,为空直接把第一个分配空间给头节点。

3、头节点不是空的情况下定义一个指针来接收头函数地址,利用while循环找到最后一个节点,相当于第一次在头节点后面创建一个节点,然后给它分配空间,让最后一个节点指向NULL。以此类推。

4、在接收用户输入的name变量的时候打印最好写成%19s确保不会溢出。

 主函数中:

 (2)、链表的遍历

遍历的思路:调用头节点的地址保存下来,然后做一个循环判断,条件是循环到最后一个节点也就是这里的b != NULL,而不是b->next != NULL,第二种会在最后一个节点跳出循环,丢失数据,

 

 

(3)、链表的释放 

思路:

1、自定义函数来接收头节点的地址,自定义结构体指针接收地址。

2、因为要改变原来的节点,用头节点来在while循环中依次往后移动,知道最后一个是NULL。

3、第一个头节点的地址也要释放c = *h

4、最后可以直接释放c然后c =NULL。

5、要注意->优先级高于*所以要(*h)->next。

 (4)、链表节点的查找

思路:查找就是自定义函数中的指针移动对应的数据对比传入的参数,如果相同返回当前地址,如果不相同并且当前的指针已经指向NULL,就返回NULL。

(1)、查找id:传入要查找的id参数,在循环条件是当前指针不能为NULL,判断id是否相等。相等返回当前指针,不相等返回NULL。

(2)、查找name:传入要查找的name参数,在循环条件是当前指针不能为NULL,判断name是否相等。相等返回当前指针,不相等返回NULL。

查找name代码如下

(1、利用结构体指针函数返回):

(5)、链表的删除

删除思路:

(1)、如果链表为空不需要删除

(2)、如果删除的是第一个节点,用头节点的指针保存下一个节点的地址。

(3)、如果删除中间节点,则找到中间节点的前一个节点,用前一个节点的指针与指向后一个节点的指针域。

寻找名字删除代码如下:

 (6)、链表节点的插入

思路:

(1)、若果链表没有节点,则新插入的的就是第一个节点。

(2)、如果新插入的节点数值小于第一个节点,则作为头节点。

(3)、如果新插入的节点在中间位置,找到前一个插入中间。

(4)、如果节点数值大,则插入最后一个。

  

(7)、链表正向排序

正向排序思路:

(1)、若果链表没有节点,则新插入的的就是第一个节点。

(2)、如果新插入的节点数值小于第一个节点,则作为头节点。

(3)、如果新插入的节点在中间位置,找到前一个插入中间。

(4)、如果节点数值大,则插入最后一个。

(8)、逆向排序(在正向的基础上)

思路:(1)、在顺序的基础上,第二个节点的指针指向头节点的地址。

           (2)、用第二个节点的地址来接收头节点地址。

           (3)、 用第三个节点的指针接收第二个节点的地址。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值