鏈表有什么用
數組: 優點: 通過索引(數組下標)可以很快地訪問數組元素;缺點: 插入/刪除元素需要對數組進行調整, 效率低;
鏈表:優點:插入/刪除速度很快,而且不用對整個鏈表進行調整;缺點:只能進行順序訪問,不能隨機訪問(像數組一樣用下標);
所以,鏈表在一些需要快速插入/刪除,而不太關心或者不需要隨機訪問的情況下使用
首先創建Node類
class Node: def __init__(self,initdata): self.data = initdata self.next = None def getData(self): return self.data def getNext(self): return self.next def setData(self,newdata): self.data = newdata def setNext(self,newnext): self.next = newnext
創建操作無序鏈表的類
class UnorderedList: def __init__(self): self.head = None def isEmpty(self): self.head == None def add(self,item): temp = Node(item) temp.setNext(self.head) self.head = temp def size(self): current = self.head count = 0 while current != None: count = count + 1 current = current.getNext() return count def search(self,item): current = self.head found = False while current != None and not found: if current.getData() == item: found = True else: current = current.getNext() return found def getvalue(self): current = self.head currarr = [] while current != None: currarr.append(current.getData()) current = current.getNext() return currarr def remove(self,item): current = self.head previous = None found = False while not found: if current.getData() == item: found = True else: previous = current current = current.getNext() if previous == None: self.head = current.getNext() else: previous.setNext(current.getNext())
操作有序列表的類
class OrderedList: def __init__(self): self.head = None def size(self): current = self.head count = 0 while current != None: count = count + 1 current = current.getNext() return count def isEmpty(self): return self.head == None def search(self,item): current = self.head found = False stop = False while current != None and not found and not stop: if current.getData() == item: found = True else: if current.getData() > item: stop = True else: current = current.getNext() return found def add(self,item): current = self.head previous = None stop = False while current != None and not stop: if current.getData() > item: stop = True else: previous = current current = current.getNext() temp = Node(item) if previous == None: temp.setNext(self.head) self.head = temp else: temp.setNext(current) previous.setNext(temp)