C语言:数据结构之单链表(二)

这篇具有很好参考价值的文章主要介绍了C语言:数据结构之单链表(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  上一篇随笔谈了谈单链表是什么东西,然后进行了初始化,这篇随笔就开始对其进行操作了,首先是增,删,改,查的增。

  增,顾名思义就是要增加新的元素,单链表是链式的,那就要考虑怎么去加新元素,有三种,从头部添加,从尾部添加,从中间添加。先说说从尾部添加,这个比较好理解,直接在尾部放一个结点然后连起来就好了。

  1、尾插法,从尾部添加节点。

  

C语言:数据结构之单链表(二)

 

C语言:数据结构之单链表(二)

 

  步骤顺其自然就来了:

  ①要想添加节点就先新建一个节点,即将成为链表的尾结点。

  ②找到尾部,也就是当前链表最后一个结点,最后一个节点与别的节点的区别就是它的next是NULL。

  ③把新建的结点加入到最后一个节点当中,具体操作就是把当前最后一个结点的next指向新建的结点就OK了。=^•ω•^=

 

void AddLetter_Tail(LinkList header, char letter_)
{
    LinkList p,q = NULL;
                                
// Creaat New node
    q = (LinkList)malloc(sizeof(LNode)); 
    q->letter = letter_;
    q->next = NULL;

//Search tail
    p = header;
    while(p->next != NULL)
    {
        p = p->next;
    }

// add node
    p->next = q;

}

 

  2、头插法,在头结点后面插入新元素,我们不能把头结点抹去,也不能在头结点前面插入,因为我们链表的第一个节点是头结点。

  

C语言:数据结构之单链表(二)

C语言:数据结构之单链表(二)

C语言:数据结构之单链表(二)

   步骤又自然而然的出来了:

  ①老规矩,先新建结点。

  ②找到头部,也就是上一篇随笔里第一次新建的结点,名字叫head。

  ③改变指针指向,新建结点的next指向首元结点(由原链表head的next得到),然后头结点(也就是head)的next指向新建的结点。

   注:第③步顺序可以改变,可以头结点先指向新建结点,新建结点next再指向首元结点,只不过程序上略有不同,需要保存好首元结点的地址也就是原链表head的next,要不然新建结点就找不到指向首元结点的入口了。

void AddLetter_Head(LinkList header,char letter_)
{
    LinkList q,p = NULL;

// Creaat New node
    q = (LinkList)malloc(sizeof(LNode));
    q->letter = letter_;
    q->next = NULL;

//add node
    p = header;

    q->next = p->next;
    p->next = q;
    
}

 

  这样就算把头插法和尾插法弄明白了,当添加完元素之后可以先遍历链表看看。

void PrintList(LinkList header)
{
    LinkList p = header->next;
    while(p != NULL)
    {
        printf("%c  ",p->letter);
        p = p->next;
    } 

    printf("\n");
}

 

  main函数代码如下:

int main()

{
    printf("This is Struct_Data:\n\n");

    LinkList head = Init_linklist();

    AddLetter_Tail(head,'H');
    AddLetter_Tail(head,'i');
    AddLetter_Tail(head,',');
    AddLetter_Tail(head,'L');
    AddLetter_Tail(head,'i');
    AddLetter_Tail(head,'n');
    AddLetter_Tail(head,'u');
    AddLetter_Tail(head,'x');
    AddLetter_Tail(head,'.');
    PrintList(head);


    AddLetter_Head(head,'/');    
    AddLetter_Head(head,'U');    
    AddLetter_Head(head,'b');    
    AddLetter_Head(head,'u');    
    AddLetter_Head(head,'n');    
    AddLetter_Head(head,'t');    
    AddLetter_Head(head,'u');    
    AddLetter_Head(head,'.');    
    PrintList(head);


    return 0;
}

  效果如图:

  

C语言:数据结构之单链表(二)

 

  下一篇将谈一谈中间插入元素,和删除操作。 

 

  总结: ①在学习新东西的时候一定要想清楚自己在干什么,要有主见的去学习新事物。

      ②可以画图,写写字儿,理清自己的思路。

      ③程序不是只能这么写,只要符合逻辑怎么写都行,当时就是太死板,总想着去记住程序。

   以上只是本人的理解和所见,如有不同见解和看法,欢迎在评论区批评指正。文章来源地址https://www.toymoban.com/news/detail-532450.html

到了这里,关于C语言:数据结构之单链表(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [数据结构]链表之单链表(详解)

    在学习 链表 之前,我们已经学习了 顺序表 了 根据 顺序表 的特点,我们可以发现 顺序表 有优点,也有一些缺陷。 所以根据 顺序表 的缺点,链表就横空出世啦~ **概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次

    2023年04月08日
    浏览(53)
  • 数据结构入门 — 链表详解_单链表

    数据结构入门 — 单链表详解 * 博客主页链接:https://blog.csdn.net/m0_74014525 关注博主,后期持续更新系列文章 文章末尾有源码 *****感谢观看,希望对你有所帮助***** 第一篇:数据结构入门 — 链表详解_单链表 第二篇:数据结构入门 — 链表详解_双向链表 第三篇:数据结构入门

    2024年02月11日
    浏览(51)
  • 【数据结构】-- 单链表 vs 双向链表

    🌈 个人主页: 白子寰 🔥 分类专栏: python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏 👈 希望得到您的订阅和支持~ 💡 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)  目录  单链表和

    2024年04月17日
    浏览(43)
  • 【数据结构】反转链表、链表的中间节点、链表的回文结构(单链表OJ题)

    正如标题所说,本文会图文详细解析三道单链表OJ题,分别为:  反转链表 (简单)  链表的中间节点 (简单)  链表的回文结构 (较难) 把他们放在一起讲的原因是:  反转链表 和  链表的中间节点 是  链表的回文结构 的基础 为什么这样说?请往下看: 目录 1. 反转链

    2024年02月13日
    浏览(68)
  • 【数据结构】认识链表和模拟实现单链表

    即使骑的小电驴,也要奋力前进 目录 1.链表 1.1 链表的概念  1.2 链表的逻辑结构图和物理结构图 1.2.1 链表的逻辑结构图  1.2.2 链表的物理结构图  1.3链表结构的分类 1.3.1 链表通过什么进行结构的分类  1.3.2 不同链表结构的逻辑图 2.模拟实现一个单向链表  2.1 MyLinkedList类的

    2024年02月14日
    浏览(55)
  • 【数据结构】 链表简介与单链表的实现

    在【数据结构】 ArrayList简介与实战中我们已经熟悉了ArrayList的使用,并且进行了简单模拟实现。通过源码知道,ArrayList底层使用数组来存储元素 由于其底层是一段连续空间, 当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为

    2024年02月12日
    浏览(167)
  • 【数据结构】链表(单链表与双链表实现+原理+源码)

    博主介绍:✌全网粉丝喜爱+、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦! 🍅附上相关C语言版源码讲解🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找

    2024年01月24日
    浏览(123)
  • 【数据结构】--单链表力扣面试题②反转链表

    目录 题目链接:反转链表   法一:直接反转法 法二:头插法 题目分析: 创建一个新链表,然后值是逆置的行吗?不行。因为题目要求的是在 原链表上逆置,改变原链表的指向,并不是值的拷贝后的逆转 。 那其实总共有三种方法 。 法一,直接原地翻转。法二,头插法。

    2024年02月06日
    浏览(37)
  • 链表的总体涵盖以及无哨兵位单链表实现——【数据结构】

     😊W…Y:个人主页 在学习之前看一下美丽的夕阳,也是很不错的。 如果觉得博主的美景不错,博客也不错的话,关注一下博主吧💕 在上一期中,我们说完了顺序表,并且提出顺序表中的问题 1. 中间/头部的插入删除,时间复杂度为O(N) 2. 增容需要申请新空间,拷贝数据,释

    2024年02月14日
    浏览(64)
  • 【数据结构】移除链表元素-图文解析(单链表OJ题)

    LeetCode链接:203. 移除链表元素 - 力扣(LeetCode) 本文导航 💭做题思路 🎨画图更好理解: ✍️代码实现 🗂️分情况讨论: ❄️极端情况: 遍历链表,找到值为 val 的节点删除 这里需要两个指针  cur 用来遍历链表  prev 指向 cur 的前一个位置,方便删除一个节点后,链接前

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包