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

  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. 洛谷p2216 多次单调队列,扫描矩阵中的最大值减去最小值最的固定大小子矩阵

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; int ...

  2. Linux kill All In One

    Linux kill All In One kill -9 kill $ kill <PID> $ ps -ef | grep node $ sudo kill -9 <PID> ...

  3. webpack 5 模块联合

    webpack 5 模块联合 webpack 5 https://webpack.docschina.org/concepts/module-federation/ https://github.co ...

  4. github & coding 2018

    github & coding 2018 github & coding all in one https://github.com/topics/javascript react r ...

  5. windows 10 remote desktop

    windows 10 remote desktop https://support.microsoft.com/en-us/help/4028379/windows-10-how-to-use-rem ...

  6. 如何关闭 iPad Pro 自动开启 wifi 和蓝牙

    如何关闭 iPad Pro 自动开启 wifi 和蓝牙 为了省电,明明关闭了,但是发现每天都会自动开启,什么鬼设计 https://support.apple.com/zh-cn/HT208086 h ...

  7. taro & Error: spawn taro ENOENT

    taro & Error: spawn taro ENOENT https://stackoverflow.com/questions/27688804/how-do-i-debug-erro ...

  8. 小程序 & taro 踩坑指南

    小程序 & taro 踩坑指南 微信开发者工具, 不支持 react bug https://github.com/NervJS/taro/issues/5042 solution just ...

  9. 币圈沸腾!SPC空投上线!不要错过!

    币圈最近处于沸腾的时刻,NGK侧链代币SPC已上线钱包,3.0公链NGK生态之SPC空投又来了,NGK的上一个项目BGV投资收益率最高破一千七百倍,NGK官方此次以算力持有者为中心,将发起第二轮福利- ...

  10. NGK DeFi Baccarat或将推动BGV成为下一个千倍币!

    目前,已经接近2020年年末,但是DeFi的热潮还在持续.近日,DeFi市场传出一道重磅利好消息,便是NGK DeFi去中心化交易系统Baccarat即将上线.届时,将会引起整个区块链市场的又一次震动 ...