链表
链表是计算机科学中最常用的数据结构之一。它也是最简单的结构之一,也是更高层结构(如堆栈、循环缓冲区和队列)的基础
定义
- 链表是计算机科学中最常用的数据结构之一。它也是最简单的结构之一,也是更高层结构(如堆栈、循环缓冲区和队列)的基础
- 列表是通过引用连接的单个数据元素的集合.数据元素可以由地址数据、地理数据、几何数据、路由信息或事务细节组成。通常,链接列表的每个元素都具有特定于列表的相同数据类型
- 单个列表元素称为节点。节点不同于顺序存储在内存中的数组。相反,它可能会在不同的内存段中找到它们,您可以通过跟踪从一个节点到下一个节点的指针找到这些内存段。通常使用 null 元素标记列表的结尾,该元素由 python 等效的 None 表示。
- 链表就是将一系列不连续的内存联系起来,将那种碎片内存进行合理的利用,解决空间的问题
- 链表允许插入和删除表上任意位置上的节点,但是不允许随即存取
- 内存中的存储形式可以分为连续存储和离散存储两种。因此,数据的物理存储结构就有连续存储和离散存储两种,它们对应了我们通常所说的数组和链表。
单链表数据结构
- head 保存首尾节点的地址
- data1,next -> data2,next -> data3,next
双链表数据结构
head=None
时为首节点,next=null
时为尾节点head,data,next -> head,data,next -> head,data,next
链表类型
- 单链接列表
- 节点只指向列表中的下一个元素
- 双链接列表
- 节点指向列表中的下一个元素,也指向上一个节点
- 循环链表
- 循环链表就是首节点和末节点被连接在一起。循环链表中第一个节点之前就是最后一个节点
- 单链接列表
链表应用场景
- 数组应用场景:
- 数据比较少
- 经常做的运算是按序号访问数据元素;数组更容易实现,任何高级语言都支持;
- 构建的线性表较稳定。
- 链表应用场景:
- 对线性表的长度或者规模难以估计
- 频繁做插入删除操作
- 构建动态性比较强的线性表。
- 数组应用场景:
数组和链表差异分析
- 数组和链表的差异分析
- 差异点
- 链表是链式的存储结构;数组是顺序的存储结构。
- 链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储。
- 链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难;
- 数组寻找某个元素较为简单,但插入与删除比较复杂,由于最大长度需要再编程一开始时指定,故当达到最大长度时,扩充长度不如链表方便。
- 相同点
- 两种结构均可实现数据的顺序存储,构造出来的模型呈线性结构。
- 差异点
单链表和双链表的差异
- 一、方向不同
- 单链表只有指向下一个结点的指针
- 双链表既有指向下一个结点的指针,也有指向上一个结点的指针
- 二、适用情况不同
- 单向链表更适合元素的增加与删除
- 双向链表更适合元素的查询工作
- 三、读取不同
- 单链表只能单向读取
- 双链表可以双向读取
链表的代码实现
单链表 Python 代码实现
1 | class Node: |
双链表 Python 代码实现
1 | ''' |