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

  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. 重学c#————struct

    前言 简单整理一下struct. 正文 struct 对于struct 而言呢,我们往往会拿class作为对比,但是呢,我们在初学阶段用class来替代struct,struct的存在感越来越低了. ...

  2. Linux下开发STM32单片机

    一开始学习51单片机就是用的MDK这个IDE软件,IDE软件虽然看起来直观好像更加容易入门(因为有界面看起来很形象),但是实际上IDE却是向我们这些入门人员隐藏了背后真实存在的过程,让我们以为编译就是 ...

  3. 使用 js 实现一个简易版的 GIPHY 动图搜索 web 应用程序

    使用 js 实现一个简易版的 GIPHY 动图搜索 web 应用程序 具有挑战性的前端面试题 API JAMstack refs https://www.infoq.cn/article/0NUjpx ...

  4. TypedArray & ArrayBuffer

    TypedArray & ArrayBuffer Type Each element size in bytes Int8Array 1 Uint8Array 1 Uint8ClampedAr ...

  5. Microsoft Solitaire Collection

    Microsoft Solitaire Collection game https://zone.msn.com/gameplayer/gameplayerHTML.aspx?game=mssolit ...

  6. Deno 1.0 & Node.js

    Deno 1.0 & Node.js A secure runtime for JavaScript and TypeScript. https://deno.land/v1 https:// ...

  7. lightning & web components & templates & slots

    lightning & web components & templates & slots Web components, Custom elements, Template ...

  8. modal over table bug

    modal over table bug table can not clickable bad <el-row> <el-col :span="24"> ...

  9. luogu4464:莫比乌斯反演,积性函数和伯努利数

    题目链接:https://www.luogu.com.cn/problem/P4464 简记$gcd(x,y)=(x,y)$. 推式子: $\sum_{i=1}^{n}{(i,n)^xlcm(i,n) ...

  10. TERSUS无代码开发(笔记03)-常用快捷键

    常用快捷键 1.a 普通行为元件调用 2.b 判断输入的值是什么值 3.c 有条件的传值处理 4.e 输出元件 5.f 传值或流程 6.t 输入元件 7.p 调用元件查询 8.x 判断是否有输入值 图 ...