zoukankan      html  css  js  c++  java
  • python 实现链表的增删改查(双向链表)

     ###节点类
    ###三个属性,节点值,前向指针,后向指针
    class
    Node(): def __init__(self,value,next,prev): self.value = value self.next = next self.prev = prev
    ###操作链表类
    class Link(): def __init__(self,value): self.link_create(value)
      #链表元素个数
    def link_count(self): print("link's len is %d"%self.count)
      #创建链表
    def link_create(self,value): self.head = Node(value,None,None) self.tail = self.head self.count = 1

    #在链表指定位置添加元素 def link_push_index(self,index,value): temp_next = Node(value,None,None) if index <= 1: #index < 1时,头加 temp_next.next = self.head self.head = temp_next elif index >= self.count: #index >链表长度时,尾加 self.tail.next = temp_next temp_next.prev = self.tail self.tail = temp_next else:        #链表指定位置加 num = 1 temp_node = self.head while num != index: num = num + 1 temp_node = temp_node.next temp_node_prev = temp_node.prev temp_node.prev = temp_next temp_next.next = temp_node temp_next.prev = temp_node_prev temp_node_prev.next = temp_next self.count += 1   #添加元素-默认尾加 def link_push(self,value): temp_next = Node(value,None,None) temp_prev = self.tail self.tail.next = temp_next self.tail = temp_next self.tail.prev = temp_prev self.count += 1
    #删除指定位置元素 def link_pop_index(self,index): if index <= self.count and index > 0: if index == 1: temp_node = self.head self.head = temp_node.next else: temp_num = 1 temp_node = self.head while temp_num != index : temp_node = temp_node.next temp_num = temp_num + 1 temp_node.prev.next = temp_node.next temp_node.next.prev = temp_node.prev self.count -= 1 else: print("Error:the link only have %d node"%self.count)
      #删除第一个找到的目标元素
    def link_pop_value_one(self,value): if self.count >0: if value == self.head.value: temp_node = self.head self.head = temp_node.next self.count -= 1 else: temp_node = self.head while temp_node != None and temp_node.value != value: temp_node = temp_node.next if temp_node == None: print("the link not have %s"%value) else: temp_node.prev.next = temp_node.next temp_node.next.prev = temp_node.prev self.count -= 1 else: print("the link is empty!")   #删除链表中全部目标元素 def link_pop_value_all(self,value): if self.count >0: temp_node = self.head while temp_node != None: if self.head.value == value: temp_node = self.head self.head = temp_node.next temp_node = self.head self.count -= 1 else: if temp_node.value == value:
                 if temp_node.next != None:
    temp_node.prev.next = temp_node.next temp_node.next.prev = temp_node.prev
    else:
    self.tail = temp_node.prev
    self.tail.next = None self.count
    -= 1 temp_node = temp_node.next else: print("the link is empty!")   

      #修改指定位置元素的值
    def link_alter_index(self,num,value): temp_node = self.head temp_num = 1 if num > 0 and num <= self.count: while temp_num != num: temp_num += 1 temp_node = temp_node.next temp_node.value = value else: print("Error:the link only have %d node"%self.count)
      #修改第一个找到的目标元素的值
    def link_alter_value_one(self,value_old,value_new): temp_node = self.head while temp_node != None and temp_node.value != value_old: temp_node = temp_node.next if temp_node == None: print("the link not have %s"%value_old) else: temp_node.value = value_new
      #修改链表中全部目标元素的值
    def link_alter_value_all(self,value_old,value_new): temp_node = self.head while temp_node != None: if temp_node.value == value_old: temp_node.value = value_new temp_node = temp_node.next
      #打印链表(正序)
    def link_print(self): temp_node = self.head while temp_node != None: print temp_node.value temp_node = temp_node.next


    #调用及结果
    #创建链表
    head = Link("head")  
    for i in range(8):
        head.link_push(i) 
    
    head.link_print()
    head.link_count()
    
      
    head.link_pop_index(2)    #删除第2个元素
    head.link_print()
    head.link_count()
      
    head.link_push(5)  #添加元素5
    head.link_print()
    head.link_count()
    
      
    head.link_push_index(3,1000)   #在第三个位置添加 1000
    head.link_print()
    head.link_count()
      

    head.link_pop_value_one(1000) #删除元素1000
    head.link_print()
    head.link_count()
      
    head.link_pop_value_all(5)  #删除所有元素5
    head.link_print()
    head.link_count()
    
      
    head.link_alter_index(1,1995)
    head.link_print()
    head.link_count()
    
    head.link_alter_value_one(15,5)
    head.link_print()
    head.link_count()
    
    head.link_alter_value_all(5,118)
    head.link_print()
    head.link_count()
    
    
     
    
    
  • 相关阅读:
    axios的数据请求方式及跨域
    vuex 的介绍
    返回顶部的过渡式写法
    数据结构和算法——二叉树
    RecyclerView的刷新和加载更多
    希尔排序小结
    选择排序小结
    插入排序小结
    冒泡、快速排序小结
    数据结构和算法——递归算法
  • 原文地址:https://www.cnblogs.com/chunqiu666/p/12843872.html
Copyright © 2011-2022 走看看