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

  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++ part1

    C++内存分配 references: C++ 自由存储区是否等价于堆? c++ new 与malloc有什么区别 C++, Free-Store vs Heap 1. 栈:由编译器自动分配释放,存放 ...

  2. 如何用 js 实现一个 class 类函数

    如何用 js 实现一个 class 类函数 原理 实现方式 总结 refs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refere ...

  3. setTimeout 实现原理, 机制

    setTimeout 实现原理, 机制 JS 执行机制说起 浏览器(或者说 JS 引擎)执行 JS 的机制是基于事件循环. 由于 JS 是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任 ...

  4. 「NGK每日快讯」2021.1.22日NGK公链第80期官方快讯!

  5. 备战春招!开源社区系统 Echo 超全文档助力面试

    博主东南大学硕士在读,寒假前半个月到现在差不多一个多月,断断续续做完了这个项目,现在终于可以开源出来了,我的想法是为这个项目编写一套完整的教程,包括技术选型分析.架构分析.业务逻辑分析.核心技术点分析 ...

  6. 字节码增强技术-Byte Buddy

    本文转载自字节码增强技术-Byte Buddy 为什么需要在运行时生成代码? Java 是一个强类型语言系统,要求变量和对象都有一个确定的类型,不兼容类型赋值都会造成转换异常,通常情况下这种错误都会被 ...

  7. 图文详解:Kafka到底有哪些秘密让我对它情有独钟呢?

  8. The last packet successfully received from the server was 49,061,696 millise

    解决连接:https://blog.csdn.net/pandajava/article/details/41946251

  9. getter和setter以及defineProperty的用法

    getter 和 setter 和 defineProperty getter:将对象属性绑定到查询该属性时将被调用的函数 说人话就是,当你调用一个getter属性时会调用定义好的get函数,这个函数 ...

  10. Linux Cron 定时任务

    作者:丁仪 来源:https://chengxuzhixin.com/blog/post/LinuxCron-ding-shi-ren-wu.html 定时任务是经常被用到的,比如系统备份.数据导出等 ...