一、链表介绍
数组和链表都是最基础的线性数据结构,可以用来实现栈,队列等非线性,有特定应用场景的数据结构。数组作为数据存储结构有很多缺陷,在无序数组中搜索效率低,在有序数组中插入效率又很低,无论哪种情况删除操作效率都很低。而且数组一旦创建,大小不可更改。除非是要频繁通过下标访问数据,否则在很多场合都可以用链表替换数组。
1️⃣什么是链表?
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表通常由一连串节点组成,每个节点包含该节点的数据和指向上一节点或者下一节点的引用(链接)。如下图,在数据结构中,a1里面的指针存储着a2的地址,这样一个链接一个,就形成了链表。![](https://img.haomeiwen.com/i7038163/b3c312733ad3ef8f.png)
①相邻元素之间通过指针链接
②最后一个元素的后继指针为NULL
③在程序执行过程中,链表的长度可以增加或缩小
④链表的空间能够按需分配
⑤没有内存空间的浪费
2️⃣链表的优缺点?
①优点:
- 插入和删除时不需移动其他元素,只需改变指针,效率高。
- 链表各个节点在内存中空间不要求连续,空间利用率高。
- 大小没有固定,拓展很灵活。
②缺点:查找数据时效率低,因为不具有随机访问性。
3️⃣链表的种类
单向链表、双向链表、循环单链表、循环双链表等等。
二、单向链表
单向循环链表。与单向线性链表不同的是,链表尾节点的后指针指向头节点。首尾相接构成环状结构。
单向线性链表。单向链表是最简单的链表,单链表节点包含两部分内容,一是存储数据信息,二是存储指向下一个节点的指针,叫做后指针。最后一个节点叫做尾节点,尾节点的后指针为 NULL。其中第一个节点叫做头节点,指向头结点的指针叫做头指针。
单向链表只可向一个方向遍历,一般查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置。![](https://img.haomeiwen.com/i7038163/6f73e205f7d774bc.png)
![](https://img.haomeiwen.com/i7038163/8ce61bdd6cbc0741.png)
![](https://img.haomeiwen.com/i7038163/d49c217cd47dd20c.png)
三、双端链表
如果想在单项链表尾部添加一个节点,那么必须从头部一直遍历到尾部,找到尾节点,然后在尾节点后面插入一个节点,这样操作很麻烦。如果在设计链表的时候多个对尾节点的引用,那么会简单很多。![](https://img.haomeiwen.com/i7038163/bfbb602671669506.png)
四、双向链表
双向循环链表。与双向线性链表相比,头节点中的前指针指向尾节点,尾节点的后指针指向头节点,构成环状结构。
![](https://img.haomeiwen.com/i7038163/8dcea141221d967d.png)
网友评论