單鏈表的Python實現
阿新 • • 發佈:2019-01-23
今天寫了一個用Python實現單鏈表,基本功能包括:從頭插入,從尾插入,查詢,刪除,構造有限佇列的插入等功能。
# -*- coding: utf-8 -* ##允許中文註釋 ''' 單向連結串列的Python實現 L = LinkList() L.addToHead ##從頭節點加入資料 L.addToTail ##從尾節點加入資料 L.findTail ##返回尾節點 L.findSize ##返回連結串列大小 L.delete(data) ##刪除指定節點 L.search(index) ##返回指定index的節點 L.clear() ##清空連結串列 author: diudiu ''' class Node(): def __init__(self, data = None, next = None): self.data = data self.next = next def __str__(self): return 'Node [' + str(self.data) + ']' class LinkList(): def __init__(self): self.head = None #self.tail = None #也可以設定一個tail,這樣就不需要呼叫findTail()函式去找尾巴了 self.size = 0 def __str__(self): newNode = self.head s = '' while newNode: s += str(newNode.data) if newNode.next: s += ',' newNode = newNode.next return s def addToHead(self, data): newNode = Node(data, None) if self.head == None: self.head = newNode else: newNode.next = self.head self.head = newNode self.size += 1 def addToTail(self, data): newNode = Node(data, None) if self.head == None: self.head = newNode else: tail = self.findTail() tail.next = newNode self.size += 1 def findTail(self): curNode = self.head ##currentNode = self.head while curNode.next: curNode = curNode.next return curNode def findSize(self): return self.size def delete(self, data): if self.size == 0: print "Can not delete from an empty list" return curNode = self.head preNode = None while curNode: if curNode.data == data: break else: preNode = curNode curNode = curNode.next if curNode == self.head: self.head = self.head.next elif curNode == None: print 'Cant find the data you want delete' else: preNode.next = curNode.next curNode = None self.size -= 1 def insert(self, data):##將構造一個有限佇列 newNode = Node(data, None) if self.size == 0: self.head = newNode else: curNode = self.head preNode = None while curNode: if curNode.data >= data: break else: preNode = curNode curNode = curNode.next if curNode == self.head: newNode.next = self.head self.head = newNode else: newNode.next = curNode preNode.next = newNode self.size += 1 pass def search(self, index): if self.size == 0: print "the list is empty" return if index > self.size: print "the index is out of boundary" return curNode = self.head cnt = 1 while curNode: if cnt == index: return curNode cnt += 1 curNode = curNode.next def clear(self): self.__init__() def test(): L = LinkList() while 1: data = raw_input('input data, input "q" to stop: ') if data == 'q': break L.insert(data) print L index = raw_input('input the index:') print L.search(int(index)) while 1: data = raw_input('delete data, input "q" to stop: ') if data == 'q': break L.delete(data) print L if __name__ == "__main__": test()