1. 程式人生 > >python 資料結構與演算法 day02 雙向連結串列

python 資料結構與演算法 day02 雙向連結串列

1.實現雙向連結串列

#_+_coding:utf-8_*_
#author:    xuanxuan
#Time :     2018/11/7  8:48

class Node():
    def __init__(self,item):
        self.item=item
        self.prev=None  # 前驅結點
        self.next=None  # 後繼結點

class DoubleLinkList(object):
    def __init__(self,node=None):
        self.__head=node

    
def is_empty(self): """判斷雙向連結串列是否為空""" if self.__head is None: return True return False def length(self): """求雙向連結串列的長度""" count=0 cur=self.__head while cur is not None: count+=1 cur = cur.next return
count def travel(self): """實現雙向連結串列的遍歷""" cur=self.__head while cur is not None: print(cur.item,end=" ") cur=cur.next print("") def add(self,item): """在雙向連結串列的頭部新增結點(元素)""" node=Node(item) if self.__head is None: #
雙向連結串列為空 self.__head=node else: node.next=self.__head self.__head.prev=node self.__head=node def append(self,item): """在雙向連結串列的尾部追加結點(元素)""" node=Node(item) if self.__head is None: # 雙向連結串列為空 self.__head=node else: cur=self.__head while cur.next is not None: cur=cur.next node.prev=cur cur.next=node def insert(self,pos,item): """在雙向連結串列的任意位置插入結點(元素)""" node=Node(item) if pos<=0: self.add(item) elif pos>=self.length(): self.append(item) else: count=0 cur=self.__head while count<pos: cur=cur.next count+=1 node.next=cur node.prev=cur.prev cur.prev=node node.prev.next=node def remove(self,item): """從雙向連結串列中刪除一個元素""" if self.search(item): cur=self.__head if self.__head.item==item: self.__head=self.__head.next if self.__head.next: # 只有一個結點,刪除第一個結點 self.__head.next.prev=None else: while cur is not None: if cur.next is None: # 刪除最後一個結點 cur.prev.next=None break if cur.item==item: cur.prev.next=cur.next cur.next.prev = cur break else: cur=cur.next def search(self,item): """判斷雙向連結串列中是否存在該元素""" cur=self.__head while cur is not None: if cur.item==item: return True cur=cur.next return False if __name__=="__main__": dll=DoubleLinkList() print(dll.is_empty()) dll.append(1) dll.append(2) dll.append(3) dll.append(4) dll.add(0) print(dll.length()) dll.travel() dll.insert(0,1000) dll.insert(5,200) dll.travel() dll.remove(200) dll.remove(1000) dll.travel()

 

 

 

執行結果: