一郎科技|就靠这20+张图了,一口气搞懂「链表」


来源|技术让梦想更伟大(ID:TechDreamer)
说真的 , 任何说起嵌入式软件怎么入门啊?需要学些什么东西啊 , 我差不多一致的回答都是:软件方面C语言和数据结构加上一些简单常用的算法 , 这些需要学好 。
借着自己的回顾学习 , 我也写一些基础的数据结构知识 , 多画图 , 少打字 , 与大家一起学习数据结构 。
但是 , 但是 , 数组最大的缺点就是我们的插入和删除时需要移动大量的元素 , 所以呢 , 大量的消耗时间 , 以及冗余度难以接受了 。
以C语言数组插入一个元素为例 , 当我们需要在一个数组{1,2,3,4}的第1个元素后的位置插入一个’A’时 , 我们需要做的有:
将第1个元素后的整体元素后移 , 形成新的数组{1,2,2,3,4};
再将第2个元素位置的元素替换为我们所需要的元素’A’;
最终形成我们的预期 , 这需要很多的操作喔 。
插入删除操作所需要移动的元素很多 , 浪费算力 。
必须为数组开足够的空间 , 否则有溢出风险 。
链表—链式存储由于数组的这些缺点 , 自然而然的就产生链表的思想了 。
链表通过不连续的储存方式 , 自适应内存大小 , 以及指针的灵活使用 , 巧妙的简化了上述的内容 。
链表的基本思维是 , 利用结构体的设置 , 额外开辟出一份内存空间去作指针 , 它总是指向下一个结点 , 一个个结点通过NEXT指针相互串联 , 就形成了链表 。
对于一连串的结点而言 , 就形成了链表如下图:
链表概述包含单链表 , 双链表 , 循环单链表 , 实际应用中的功能不同 , 但实现方式都差不多 。
双链表像是中国男足 , 你传球给我 , 我传球给你 , 最终传给了守门员;
循环链表就像是中国男篮 , 火炬从姚明传给王治郅 , 王治郅传给易建联 , 现在易建联伤了 , 又传给了姚明 。


推荐阅读