
链表是计算机科学中使用最广泛的数据结构之一. 它是最简单的数据结构之一python实现链表,也是相对高级的数据结构(例如堆栈,环形缓冲区和队列)
简单地说,列表是按索引收集单个数据的集合. 在C语言中,这称为指针. 例如,数据元素可以由地址元素,地理元素,路由信息,交易明细等组成. 但是,链表中的元素类型相同,这是一个特殊列表.
单个列表元素称为节点. 这些节点未以与数组相同的顺序存储在内存中. 相反,您可以通过一个节点指向另一节点的指针在不同的内存位置中找到这些元素. 列表中的最后一项通常用NIL表示,相当于python中的None
这是两个不同的列表-单链表和双链表. 双链列表中的节点将仅指向列表中的下一个元素,但在双链列表中,当前节点也将指向前一个节点. 因此,双链表将占用更多内存,因为它需要其他变量来存储索引
图1.单链表
图2: 双向链接列表
可以按顺序查询单个链表,但反向查找并不容易. 但是,双链表无论您从哪个节点开始,任何方向的查询都是相同的. 在单链列表中添加和删除节点仅需两个步骤,而在双链列表中只需四个步骤.
但是Python中没有像双链表这样的数据结构,因此我们可以创建这样的数据结构
首先,我们将节点类定义为ListNode. 此类在初始化实例对象时定义了两个实例变量,其中数据用于存储节点的值,下一个用于存储下一个节点的索引. 为节点定义的方法和属性
__ init __(): 初始化节点
self.data: 存储节点的值

self.next: 存储指向下一个节点的索引
has_value(): 将当前节点值与其他值进行比较
以上方法和属性涵盖了节点的基本属性和行为
Listing1: ListNode类
在上面创建最简单的节点类,并在下面初始化ListNode对象
清单2: 初始化节点
上面创建了三个独立的节点
现在,我们定义一个名为SingleLinkedList的类来管理节点,该类包含以下方法:
__初始化__(): 初始化对象
list_length(): 返回节点数
output_list(): 输出节点值

add_list_item(): 在列表末尾添加一个新节点
unordered_search(): 根据特殊值查询列表
remove_list_item_by_id(): 根据节点ID删除节点
下面逐一解释这些方法
__ init __()定义了头和尾,都初始化为None
Listing3: SingleLinkedList类(第一部分)
通过add_list_item()添加列表元素. 首先检查它是否是ListNode的实例,如果不是,则创建一个新节点. 如果列表仍然为空,则将该节点视为头节点;如果列表不为空python实现链表,则将当前节点指向下一个元素(即,新添加的节点). 将新节点添加到列表中
Listing4: SinglelinkedList类(第二部分)
The
list_length()方法计算节点数并返回列表的长度. 循环遍历列表,self.next依次指向下一个节点
Listing5: SingleLinkedList类(第三部分)

output_list()用于输出新的节点值
Listing6: SingleLinkedList类(第四部分)
接下来,我们初始化SingleLinkedList的实例轨道,然后创建4个节点.
使用unordered_search()查询整个列表. 它需要一个附加参数来帮助查询. 列表的开头是入口点.
从列表中删除节点时,指向该节点的索引需要移动到已删除节点的下一个节点. 删除的节点将通过Python的垃圾回收机制清除
清单10: 按节点号删除节点
创建双向链接列表实际上是在基于ListNode创建先前的属性
Listing11: 扩展列表节点类

然后我们可以根据以上定义创建一个新的双向链接列表类
添加新节点与单链列表不同
删除双向链接列表中的节点
python的实际使用
输出结果
热门标签: 令人惊叹的四人组,打破戒指,败家子的败家子,3.5亿卢布,弟弟的延续,水月记号B边,英美炮战,挽救叶尼古心爱的Tupipa伴奏,王忠军的背叛,为护送女孩提供的特殊服务,五个要素,最有才华的陈宇龙五龙山匪盗,杀死了盈江市副市长张振国
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-208680-1.html
苹果5代的更新9系统就别在这BB
北洋水师总吨位4万吨