双链表和单链表进行比较的优点与不同

  1. 节点多了一个前驱指针域
  2. 在很多基本操作上,多了一种选择,因为双链表可以向前进行移动寻位
  3. 如果给每个节点添加一个对应的下标,那么在寻找节点时,我们可以使用二分发来进行节点的寻址工作,这相对于单链表是一个性能的优化
 7  """
8 python实现双链表
9 """
10 class Node(object):
11 def __init__(self,elem):
12 self.elem = elem
13 self.next = None
14 self.front = None
15 class linklist(object):
16 def __init__(self,node = None):#链表的初始化
17 self.__head = node
18 self.curlen = 0
19 def empty(self):
20 if self.head == None:
21 raise Exception("链表为空")
22 def len(self):
23 return self.curlen
24 def add_head(self,item):
25 node = Node(item)
26 node.next = self.__head
27 self.__head = node
28 self.curlen += 1
29 def add_tail(self,item):
30 node = Node(item)
31 tempnode = self.__head
32 while tempnode != None:
33 tempnode = tempnode.next
34 tempnode.next = node
35 self.curlen += 1
36 def insert(self,location,item):
37 node = Node(item)
38 if location < 0 or location > self.curlen - 1:
39 raise Exception("插入位置非法")
40 elif location == 0:
41 self.add_head(item)
42 elif location == self.curlen:
43 tempnode = self.__head
44 while tempnode.next != None:
45 tempnode = tempnode.next
46 tempnode.next = node
47 self.curlen += 1
48 else:
49 tempnode = self.__head
50 for i in range(location - 1):
51 tempnode = tempnode.next
52 node.next = tempnode.next
53 tempnode.next = node
54 self.curlen += 1
55 def delitem(self,item):
56 if self.__head.elem == item:
57 self.__head = self.__head.next
58 else:
59 tempnode = self.__head
60
61 while tempnode!= None:
62 if tempnode.next.elem == item:
63 break
64 tempnode = tempnode.next
65 tempnode.next = tempnode.next.next
66 def change(self,item,changed_item):
67 tempnode = self.__head
68 while tempnode != None:
69 if tempnode.elem == item:
70 tempnode.elem = changed_item
71 break
72 def search(self,item):
73 tempnode = self.__head
74 while tempnode != None:
75 if tempnode.elem == item:
76 return True
77 tempnode = tempnode.next
78 return False
79 def display(self):
80 tempnode = self.__head
81 while tempnode != None:
82 print(tempnode.elem,end = " ")
83 tempnode = tempnode.next
84 print()
85 if __name__ == "__main__":
86 linklist1 = linklist()
87 linklist1.add_head(1)
88 linklist1.add_head(2)
89 linklist1.insert(0,3)
90 linklist1.display()
91 print(linklist1.curlen)
92 linklist1.delitem(2)
93 linklist1.display()
94 linklist1.change(3,4)
95 print(linklist1.search(4))
96 linklist1.display()

此代码并没有充分的利用双链表的优点来进行操作,有兴趣的同学可以在此基础上来进行修改

python-实现双链表的更多相关文章

  1. Python实现双链表

    双向链表(Double_linked_list)也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结 ...

  2. Python与数据结构[0] -> 链表/LinkedList[1] -> 双链表与循环双链表的 Python 实现

    双链表 / Doubly Linked List 目录 双链表 循环双链表 1 双链表 双链表和单链表的不同之处在于,双链表需要多增加一个域(C语言),即在Python中需要多增加一个属性,用于存储指 ...

  3. JAVA 链表操作:单链表和双链表

    主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...

  4. java实现双链表(差点没写吐系列...)

    刚才把单链表写完了,现在又把双链表写了,双链表和单链表的区别就是每个节点有prior和next两个指针,不同于单链表的一个next指针,而且,正是因为有这两个指针,所以双链表可以前后两个方向去移动指针 ...

  5. 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  6. C和指针 第十二章 使用结构和指针 双链表和语句提炼

    双链表中每个节点包含指向当前和之后节点的指针,插入节点到双链表中需要考虑四种情况: 1.插入到链表头部 2.插入到链表尾部 3.插入到空链表中 4.插入到链表内部 #include <stdio ...

  7. [C++11][数据结构]自己的双链表实现

    这个双链表,是我模仿stl的list制作的,只实现了一些基本功能,像merge,transfer这些就没有实现,用户可以用基本操作来自己做外部实现. 我没有选用stl的[begin,end)迭代器模式 ...

  8. C#双链表

    单链表允许从一个结点直接访问它的后继结点,所以, 找直接后继结点的时间复杂度是 O(1).但是,要找某个结点的直接前驱结点,只能从表的头引用开始遍历各结点.如果某个结点的 Next 等于该结点,那么, ...

  9. Linux 底下使用C语言的 单链表 ,双链表,二叉树 读取文件,并排序

    直接上代码 单链表Linux读文件排序: 双链表Linux读取文件排序: 二叉树LinuX读取文件并排序:

随机推荐

  1. Netty(六)揭开 BootStrap 的神秘面纱

    6.1 客户端 BootStrap 6.1.1 Channel 简介 在 Netty 中,Channel 是一个 Socket 的抽象,它为用户提供了关于 Socket 状态(是否是连接还是断开)以及 ...

  2. 破解编码面试第六版 - JavaScript

    破解编码面试第六版 - JavaScript Cracking the Coding Interview: 189 Programming Questions and Solutions 6th Ed ...

  3. 使用 js 实现十大排序算法: 堆排序

    使用 js 实现十大排序算法: 堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法. 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列: 小顶堆:每个 ...

  4. js array flat all in one

    js array flat all in one array flat flatMap flatMap > flat + map https://developer.mozilla.org/en ...

  5. free online linux terminal & github cli online

    free online linux terminal & github cli online gitpod https://www.gitpod.io/features/ https://bc ...

  6. JavaScript Weekly

    JavaScript Weekly 技术订阅 https://javascriptweekly.com/issues/489 WebGL https://xem.github.io/articles/ ...

  7. arrayBuffer 转base64

    var buffer = new ArrayBuffer(8);// buffer 是接收到后台的流 function _arrayBufferToBase64( buffer ) { var bin ...

  8. 教你玩转CSS 居中

    1.元素居中对齐 要水平居中对齐一个元素(如 <div>), 可以使用 margin: auto;. 设置到元素的宽度将防止它溢出到容器的边缘. 元素通过指定宽度,并将两边的空外边距平均分 ...

  9. python常用内置方法index\extend\count\reverse\sort

    定义列表:(有2个值相同) a = ['XiaoBao','aiaoHao','biaoLiao','ciaoQing','eiaoLi','QiBao','biaoLiao'] 列表的索引: fir ...

  10. 配置mysql数据库时出再错误:LookupError: No installed app with label 'admin'.

    版本: windows10+py37+django2.2 错误: 项目启动时出现,No installed app with label 'admin' 解决办法: 安装最新的 pip install ...