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

  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. 2019牛客多校第九场B Quadratic equation(二次剩余定理)题解

    题意: 传送门 已知\(0 <= x <= y < p, p = 1e9 + 7\)且有 \((x+y) = b\mod p\) \((x\times y)=c\mod p\) 求解 ...

  2. mimikatz+procdump 提取 Windows 明文密码

    0x00 原理 获取到内存文件 lsass.exe 进程 (它用于本地安全和登陆策略) 中存储的明文登录密码. 0x01 操作 Windows10/2012 以下的版本:1.上传 procdump 执 ...

  3. Windows font-size: 10px; bug

    Windows font-size: 10px; bug Windows 最小只能渲染 font-size: 12px; ???屏幕分辨率 macOS 正常渲染 10px PC 最小只能渲染 font ...

  4. git hooks All In One

    git hooks All In One $ xgqfrms git:(main) cd .git/ $ .git git:(main) ls COMMIT_EDITMSG HEAD branches ...

  5. js console.log all in one

    js console.log all in one this & arguments "use strict"; /** * * @author xgqfrms * @li ...

  6. VirtualBox All in One

    VirtualBox All in One 虚拟机 / VM / Virtual Machine x86 and AMD64/Intel64 VirtualBox is a powerful x86 ...

  7. 智能合约稳定币USDN的价值在哪里?

    近几年来,区块链和数字货币市场快速发展,客观上需要价格相对稳定的交易媒介和贮藏手段,从而推动以链上资产或链下资产抵押型稳定币和算法型稳定币出现,以实现币价相对稳定的数字货币.市场上开始出现了诸如USD ...

  8. 去中心化预言机如何助力NGK DeFi 项目发展?

    早在 2014 年前后,协议智能合约就已经出现了,最初协议很笨重,包含了许多不同的部分,每个部分都是一个单独的智能合约,你需要在区块链本身的协议中添加不同的智能合约,这需要几个月甚至几年的时间,而之后 ...

  9. redis的两种持久化的机制,你真的了解么?

    redis提供了两种持久化的机制 RDB和AOF机制 RDB(redis Database):RDB保存某一个时间点之前的快照数据. AOF(Append-Only File):指所有的命令行记录以r ...

  10. 敏捷史话(七):从程序员、作家到摇滚乐手——Andy Hunt的多面人生

    与其说 Andy Hunt 是敏捷宣言的创始人,不如说他是一名专业作家来得更为合适.他的<实用程序员><程序员修炼之道:从小工到专家><编程 Ruby:实用程序员指南&g ...