1. 程式人生 > 其它 >【考試總結】2022-03-29

【考試總結】2022-03-29

python實現連結串列的實現以及增刪改查

 

一、連結串列簡介

連結串列是一種在儲存單元上非連續、非順序的儲存結構。資料元素的邏輯順序是通過連結串列中的指標連結次序實現。連結串列是由一系列的結點組成,結點可以在執行時動態生成。每個結點包含兩部分:資料域與指標域。資料域儲存資料元素,指標域儲存下一結點的指標

  

二、單向連結串列

單向連結串列也叫單鏈表,是連結串列中最簡單的形式,它的每個節點包含兩個域,一個資訊域(元素域)和一個連結域。這個連結指向連結串列中的下一個節點,而最後一個節點的連結域則指向一個空值。

單向連結串列結構

head 儲存首地址,item 儲存資料,next 指向下一結點地址。

連結串列失去了序列的隨機讀取優點,同時連結串列增加了指標域,空間開銷也較大,但它對儲存空間的使用要相對靈活。

列如:有一堆資料[1,2,3,5,6,7],要在3和5之間插入4, 如果用陣列,需要將5之後的資料都往後退一位,然後再插入4,這樣非常麻煩,但是如果用連結串列,我就直接在3和5之間插入4就行。

 

三 python實現連結串列的方式

import pdb
class Node(object):
    """連結串列節點"""
    def __init__(self, item):
        self.item = item
        self.next = None


class SingleLinkList(object): """單鏈表類""" def __init__(self): self._head = None # 判斷連結串列是否為空 def is_empty(self): return self._head is None # 統計連結串列長度 def length(self): cur = self._head count = 0 while cur is not None : count
+= 1 cur = cur.next return count # 遍歷連結串列 def items(self): cur = self._head while cur is not None: yield cur.item cur = cur.next # 向連結串列頭部新增元素 def add(self, item): node = Node(item) node.next = self._head self._head = node # 向連結串列尾部新增元素 def append(self, item): node = Node(item) if self.is_empty(): self._head = node else: cur = self._head while cur.next is not None: cur = cur.next cur.next = node # 向連結串列的指定位置新增元素 def insert(self, index, item): node = Node(item) length = self.length() if length <= 0: self._head = node elif index > length : self.append(item) else: cur = self._head for i in range(1,index): cur = cur.next node.next = cur.next cur.next = node # 刪除連結串列中的指定元素 def remove(self, item): cur = self._head pre = None while cur is not None: if cur.item == item: if not pre: self._head = cur.next else: pre.next = cur.next return else: pre = cur cur = cur.next # 判斷元素是否在連結串列中 def find(self,item): return item in self.items() if __name__ == '__main__': # pdb.set_trace() linkobj = SingleLinkList() for i in range(10): linkobj.append(i) # for node in range(10): # print(node) # linkobj.insert(10,11) #print(list(linkobj.items())) res = linkobj.remove(5) print(list(linkobj.items()))