Python数据结构--双向链表

 1 ‘‘‘
 2 双向链表包含第一个和最后一个的链接元素。
 3 每个链接都有一个数据字段和两个称为next和prev的链接字段。
 4 每个链接都使用其下一个链接与其下一个链接链接。
 5 每个链接都使用其上一个链接与之前的链接链接。
 6 最后一个链接将链接作为空来标记列表的结尾。
 7 ‘‘‘
 8
 9
10 # 创建节点
11 class Node():
12     def __init__(self, data):
13         self.data = data
14         self.next = None
15         self.prev = None
16
17
18 # 创建双链表
19 class doubly_linked_list():
20     def __init__(self):
21         self.head = None
22
23     # 遍历链表
24     def listprint(self, node):
25         while node:
26             print(node.data)
27             # last = node
28             node = node.next
29
30     # 在头部添加新节点
31     def push(self, NewVal):
32         NewNode = Node(NewVal)
33         NewNode.next = self.head
34         if self.head:
35             self.head.prev = NewNode
36         self.head = NewNode
37
38     # 在中间任意位置插入节点
39     def insert(self, prev_node, NewVal):
40         if prev_node is None:
41             return
42         NewNode = Node(NewVal)
43         NewNode.next = prev_node.next
44         prev_node.next = NewNode
45         NewNode.prev = prev_node
46         if NewNode.next:
47             NewNode.next.prev = NewNode
48
49     # 在最后追加节点
50     def append(self, NewVal):
51         NewNode = Node(NewVal)
52         NewNode.next = None
53         if self.head is None:
54             NewNode.prev = None
55             self.head = NewNode
56             return
57         last = self.head
58         while last.next:
59             last = last.next
60         last.next = NewNode
61         NewNode.prev = last
62         return
63
64
65 dllist = doubly_linked_list()
66 dllist.push(12)
67 dllist.push(8)
68 dllist.append(20)
69 dllist.push(6)
70 dllist.insert(dllist.head.next, 10)
71 dllist.append(30)
72 dllist.listprint(dllist.head)
73
74 # 结果 6 8 10 12 20 30
75 # 根据结果可知push是依次加到最前,无论append在什么位置,都是在最后追加

看图理解更容易:https://www.cnblogs.com/Knight-of-Dulcinea/p/9945821.html

原文地址:https://www.cnblogs.com/Knight-of-Dulcinea/p/9989172.html

时间: 2024-08-01 01:17:28

Python数据结构--双向链表的相关文章

Python学习日志之Python数据结构初识

Python数据结构初识: 一.Python数据结构概述 1.何为数据结构 在程序中,同样的一个或几个数据组织起来,可以有不同的组织方式,也就是不同的存储方式,不同的组织方式就是不同的结构,我们把这些数据组织在一起的结构就叫做数据结构 例如: 有一串字符串:"abc",我们将它重新组织一下,比如通过list()函数将"abc"变成["a","b","c"],那么这个时候数据发生了重组,重组之后的结构就发生了

python数据结构与算法——链表

具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向链表的实现: http://www.cnblogs.com/yupeng/p/3413800.html 我这里只实现了单链表的类型,代码也相对精简一点: 先构造关于节点的类: 1 class Node: 2 def __init__(self,data=None,next=None): 3 self

Python数据结构

1. 元组(tuple) 元组由不同的元素组成,每个元素可以储存不同类型的数据,如字符串.数字甚至元组.元组是写保护的,即元组创建后不能再做任何修改操作. 1.1 元组的创建 Tuple(元组)由一系列元素组成,所有元素被包含在一对圆括号中.创建元组时可以不指定元素个数,但一旦创建后就不能修改长度 元组的创建格式如下:tuple_name = (元素1,元素2,-) 如果创建空元组,只需要一对空的圆括号:tuple_name = () 如果创建的元组只包含一个元素,应在元素后面加上逗号,以区分元

Python数据结构——散列表

散列表的实现常常叫做散列(hashing).散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的.需要元素间任何排序信息的操作将不会得到有效的支持. 散列表是普通数组概念的推广.如果空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以运用直接寻址技术. 当实际存储的关键字比可能的关键字总数较小时,采用散列表就比较直接寻址更为有效.在散列表中,不是直接把关键字用作数组下标,而是根据关键字计算出下标,这种 关键字与下标之间的映射就叫做散列函数. 1.散列函数

python数据结构与算法 38 分析树

分析树 树的结构完成以后,该是时候看看它能做点什么实事儿了.这一节里,我们研究一下分析树.分析树能够用于真实世界的结构表示,象语法或数学表达式一类的. 图1 一个简单语句的分析树 图1所示是一个简单语句的层级结构,把语句表示为树结构可以让我们用子树来分析句子的组成部分. 图2 ((7+3)?(5?2))的分析树 我们也可以把数学表达式如((7+3)?(5?2))表示为分析树,如图2.此前我们研究过完全括号表达式,这个表达式表达了什么呢?我们知道乘法的优先级比加减要高,但因为括号的关系,在做乘法之

python数据结构与算法 36 树的基本概念

树 学习目标 理解什么是树及使用方法 学会使用树实现映射 用列表实现树 用类和引用实现树 用递归实现树 用堆实现优先队列 树的例子 前面我们学习过栈和队列这类线性数据结构,并且体验过递归,现在我们学习另一种通用数据结构,叫做树.树在计算机科学中应用广泛,象操作系统.图形学.数据库系统.网络等都要用到树.树和他们在自然界中的表哥--植物树--非常相似,树也有根,有分枝,有叶子.不同之处是,数据结构的树,根在顶上,而叶子在底部. 在开始学习之前,我们来研究几个普通的例子.第一个是生物学上的分级树.图

[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构时,这些高级的数据结构可能给我们以迷惑. 比如,使用list实现queue的时候,入队操作append()时间复杂度可以认为是O(1),但是,出队操作pop(0)的时间复杂度就是O(n). 如果是想利用python学学数据结构的话,我觉得还是自己实现一遍基本的数据结构为好. 1.链表 在这里,我想使

python数据结构与算法 37 树的实现

树的实现 记住上一节树的定义,在定义的基础上,我们用以下的函数创建并操作二叉树: BinaryTree() 创建一个二叉树实例 getLeftChild() 返回节点的左孩子 getRightChild() 返回节点的右孩子 setRootVal(val) 把val变量值赋给当前节点 getRootVal() 返回当前节点对象. insertLeft(val) 创建一个新二叉树作为当前节点的左孩子 insertRight(val) 创建一个新二叉树作为当前节点的右孩子. 实现树的关键点是合适的存

python数据结构与算法 34 归并排序

归并排序 在提高排序算法性能的方法中,有一类叫做分而治之.我们先研究其中第一种叫做归并排序.归并排序使用递归的方法,不停地把列表一分为二.如果列表是空或只有一个元素,那么就是排好序的(递归基点),如果列表有超过1个的元素,那么切分列表并对两个子列表递归使用归并排序.一旦这两个列表排序完成,称为"归并"的基本操作开始执行.归并是把两个有序列表合并成一个新的有序列表的过程.图10是我们熟悉的列表样例分解过程,图11是归并的过程. 图10  切分过程 图11  归并过程 以下是mergeSo