C语言单链表的头插法与尾插法

编程知识 更新时间:2023-04-06 20:38:50

简单介绍一下本人自我总结的单链表头插法与尾插法

#前言:这是本人新手时学习单链表头插与尾插的总结,可能有些地方描述得不太好,如有错误,烦请大家指出,谢谢!

单链表头插法:
头插则是将新节点链接到链表的头结点的后面,即不断的在头节点和第一个节点之间插入新节点,每插入一个新节点,新节点就变为第一个节点,(可理解为插队)以此循环。
// (生成的链表结点次序与输入的顺序相反)

头插法模型图如下:

具体操作代码如下 :

Struct Node{
Char data;
Struct Node *next;
}

先创建链表 
struct Node *head = (struct Node *)malloc(sizeof(struct Node));
head -> next = NULL;
在新结点没有插入之前是<1>过程,即 
head->next = first;
first ->next = NULL;
在新结点插入后是<2>过程,即
P->next = head->next;
head->next = P;

PS:这里介绍一下“电子量产工具”项目视频里韦东山老师所用的头插法。

static PDispOpr g_DispDevs = NULL;  // g_DispDevs是链表头(火车头),所谓链表就是一个指针,一开始它是空的
void RegisterDisplay(PDispOpr ptDispOpr)
{
    /* 韦老师的写法,我对此的理解是:先建立一个头指针g_DispDevs(火车头),
    * 首先先明确一点g_DispDevs = NULL,就是说火车头没有连任何车厢,现在假设我有一个LCD相关的结构体要加到这个链表(火车),火车头连接第一节车厢。
    *  过程:
    * 1.先确定你要添加的那节车厢的去向
    * (就是你要添加的那节车厢要连去哪里,要是单链表,那最后一节车厢的去向是NULL)
    *  2.因为我认为韦老师写的是头插法,所以头指针,也就是火车头连向要加的那一节车厢。
    *  附:头插则是将新节点链接到链表的头结点的后面,即不断的在头节点和第一个节点之间插入新节点,
    *  每插入一个新节点,新节点就变为第一个节点,(可理解为插队)以此循环。
    */ 
    ptDispOpr->ptNext = g_DispDevs;             
    g_DispDevs = ptDispOpr;         
}

上述方法示意图如下:


尾插法:
尾插则是将新节点链接到链表的尾部,// (生成的链表结点次序与输入的顺序一样)

尾插法示意图如下:

先创建链表 
struct Node *head = (struct Node *)malloc(sizeof(struct Node));
head -> next = NULL;
在新结点没有插入之前是<1>过程,即 
head->next = end;
end->next = NULL;
在新结点插入后是<2>过程,(end是指向最后一个结点的指针)即
P->next = end->next;
end->next = P;
end = P;	// 这时候的P已经为最后一个结点了,所以end
指针指向P

总结:头插和尾插的原理大体上都是三步:为新节点分配空间---->链接新节点---->给新节点输入数据

更多推荐

C语言单链表的头插法与尾插法

本文发布于:2023-04-06 20:38:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/f4e567c55c1c05fb938ac1aa9ee40e2f.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:链表   语言   尾插法   头插法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 50745文章数
  • 14阅读数
  • 0评论数