嵌入式学习之Linux 链表

1.链表的实现

通过结构体实现链表      结构体中定义data存放数值,定义结构体指针存放地址         

链表表里的每个数据包括数值以及地址,地址指向下一个数据的地址,在链表中数据的存放是不连续的,不同于数组,知道数组头就可以遍历整个数组。

通过t1的指针,间接输出t2,t3的数值(伪链表)

2.链表的静态添加和动态遍历

在链表末尾增加数据4,通过printflink函数打印数据,当head头指针指向为空时,遍历结束。

 3.统计链表结点个数并遍历查找

 4.链表从指定结点插入新结点

例如:在结点3后面插入新的节点,该结点的数值为100

a)找到结点3     b)令新结点的指针指向结点3原本的指针指向  new->next=3->next

c)令结点3的指针指向新结点的地址3->next=new  注意:b与c的顺序不可调换

 5. 链表从指定结点插入新结点

 分两种情况:1)头结点前边插入  2)普通结点前插入

 a)判断是否在头结点前面插入,新结点的指针指向原来的头结点,返回新结点的地址,作为新的头指针      b)判断指针是否为空,通过指定结点前一个结点的指针获取指定结点的data,判断data的数值是否相等,令新节点的指针指向指定结点前一个结点的指针 new->next = p->next,指定结点前一个结点的指针指向新结点  p->next = new,返回原本的头指针(没进行头插入,head不变)

定义一个函数返回值为结构体指针,因为若在头结点前面插入新结点,会导致头指针改变

 

6. 链表中删除指定结点

分两种情况:1)删除头结点  2)删除普通结点

a)改头:判断头结点的data是否与删除结点data相同,令头结点head指向头结点的下一个节点,

head=head->next,释放结点free(p),返回新的头指针head         

b)判断结点是否为空,判断p的data与要删除的data是否匹配,将p直接指向被删除结点的后一个结点  p->next=p->next->next,返回头指针head

注意:正常要free(p),释放空间,但此处为静态存储,会出现断错误。

 

 7.链表的动态创建 -- 头插法

每个插入的新结点都是头结点,类似于栈,进入的数据往下压(入栈)

a)声明结构体指针new  b)为结点开辟空间   c)输入结点的数值    d)新的头结点指向为旧的头结点,新结点成为头结点(头插法)   e)判断原本的头结点是否为空,为空则创建的新结点为头结点head =new   f)若想随心随欲的创建链表,则需要嵌套while,通过判断输入的数字是否为0,中断链表的创建,返回头指针

new->next=head  head=new   e)新的头结点指向新的new   new->next=head

优化头插法 将函数拆分使其更合理

 8.链表的动态创建 -- 尾插法

在链表的尾巴插入新结点,需要先遍历到链表尾

a)a)声明结构体指针new      b)嵌套while,为结点开辟空间,输入结点的数值    c)判断输入的数值是否为0,为0则释放新开辟的new空间,返回头指针     e)判断链表是否为空,若为空则将new作为头结点,返回头指针,反之,若不为空,遍历到链表尾,令尾结点的指针指向为new新结点,p->next=new ,返回头指针

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值