![](https://img.haomeiwen.com/i16825884/5ca4b5df4e9ca047.png)
如上图所示,比如我们先建立一个li的空列表,然后依次加入200,400,600这三个元素,每一个元素依次指向下一次元素,犹如被一根线串起来的,是不是我们就可以实现上述的数据结构了,当然这只是简单的一维链表,后面我们会继续介绍更多的也会更加复杂的链表结构,比如树图等。
这就引入了一个新的概念。
链表
为什么需要链表
顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。
链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
链表的定义
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。![](https://img.haomeiwen.com/i16825884/25647b2e287a8894.png)
![](https://img.haomeiwen.com/i16825884/f9e4bfc8d303b457.png)
单向链表
单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。![](https://img.haomeiwen.com/i16825884/8bf5352f58db9749.png)
- 表元素域elem用来存放具体的数据。
- 链接域next用来存放下一个节点的位置(python中的标识)
- 变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。
python中地址的概念
我们先来了解一下python中关于地址的概念:
我们先来思考一下,如何实现交换两个变量,是不是只要这样就可以了:
![](https://img.haomeiwen.com/i16825884/3295c89ae25e0d18.png)
![](https://img.haomeiwen.com/i16825884/a82d8d0657cb4131.png)
![](https://img.haomeiwen.com/i16825884/9ac4121eef04372d.png)
我们再看一个例子![]()
这个例子更加印证了变量a只是个名字,存储的是指向等号右边元素的地址。
节点实现
"""单链表的结点""" def __init__(self,item): # _item存放数据元素 self.item = item # _next是下一个节点的标识 self.next = None
![](https://img.haomeiwen.com/i16825884/d02c05803f12e547.png)
我们根据图再来理解一下上面那一段代码的意思,表示节点是不是需要定义一个类,然后是node1和node2,node1保留了指向node2的地址,并不是说node1包含node2而是node1指向node2,并且node1和node2是两块分开的内存,但通过next串连起来了。
网友评论