zoukankan      html  css  js  c++  java
  • 第七节 双向链表简单介绍和python代码实现

      双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

     

      1 class Node():
      2     '''节点类'''
      3     def __init__(self, elem):
      4         '''节点的两个参数,本身值elem以及指向下一个节点的地址next'''
      5         self.elem = elem
      6         self.next = None
      7         self.prev = None
      8 
      9 
     10 class DoubleLinkList():
     11     '''双链表'''
     12     def __init__(self, node = None):
     13         self.__head = None
     14 
     15     def sing_append(self, elem):
     16         '''链表尾部添加元素'''
     17         node = Node(elem)
     18         if self.is_empty():
     19             self.__head = node
     20         else:
     21             cur = self.__head
     22             while cur.next != None:
     23                 cur = cur.next
     24             cur.next = node
     25             node.prev = cur
     26 
     27     def is_empty(self):
     28         '''判断链表是否为空,第一次传入数据以后self.__head将永远指向node1对象'''
     29         return self.__head is None
     30 
     31     def sing_length(self):
     32         '''链表长度'''
     33         cur = self.__head
     34         # 将第一个元素的node实例赋值给cur,
     35         count = 0
     36         while cur != None:
     37             count+=1
     38             cur = cur.next
     39         return count
     40 
     41     def sing_travel(self):
     42         '''遍历整个列表'''
     43         cur = self.__head
     44         # 即将node1对象赋值给cur
     45         while cur != None:
     46             print(cur.elem)
     47             cur = cur.next
     48 
     49     def sing_add(self, item):
     50         node = Node(item)
     51         node.next = self.__head
     52         self.__head = node
     53         node.next.prev = node
     54 
     55     def sint_insert(self, pos, item):
     56         if pos <= 0:
     57             self.sing_add(item)
     58         elif pos > self.sing_length()-1:
     59             self.sing_append(item)
     60         else:
     61             cur = self.__head
     62             count = 0
     63             while count < pos:
     64                 count += 1
     65                 cur = cur.next
     66             node = Node(item)
     67             node.next = cur
     68             node.prev = cur.prev
     69             cur.prev.next = node
     70             cur.prev = node
     71 
     72     def sing_search(self,item):
     73         cur = self.__head
     74         while cur != None:
     75             cur = cur.next
     76             if item == cur.elem:
     77                 return True
     78             return False
     79 
     80     def sing_remove(self, item):
     81         cur = self.__head
     82         while cur != None:
     83             if item == cur.elem:
     84                 if cur == self.__head:
     85                     self.__head = cur.next
     86                     if cur.next:
     87                         # 判断链表是否只有一个节点
     88                         cur.next.prev = self.__head
     89                     break
     90                 else:
     91                     cur.prev.next = cur.next
     92                     if cur.next:
     93                         cur.next.prev = cur.prev
     94                     break
     95             else:
     96                 cur = cur.next
     97 
     98 if __name__ == "__main__":
     99     ll = DoubleLinkList()
    100     ll.sing_append(1)
    101     ll.sing_append(2)
    102     # ll.sing_add(8)
    103     ll.sing_append(3)
    104     ll.sint_insert(-1,5)
    105     ll.sing_travel()
    106     print(ll.sing_search(5))
    107     ll.sing_remove(3)
    108     ll.sing_travel()
  • 相关阅读:
    计算机视觉(ComputerVision, CV)相关领域的站点链接
    JS-网页中分页栏
    国内搜索大哥iOS面试题
    【iOS与EV3混合机器人编程系列之中的一个】iOS要干嘛?EV3能够更酷!
    Android多线程.断点续传下载
    【转】BeyondCompare软件使用
    【转】目前世界上最为流行的代码托管网站
    【转】为什么要用GIT而不是SVN
    【转】UBUNTU 下GIT的安装
    【转】雄鹰计划-卓越工程师炼成记
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12554833.html
Copyright © 2011-2022 走看看