# 節點類
class node():
__slots__=['_item','_next'] # 限定node例項的屬性
def __init__(self,item):
self._item = item
self._next = none # node的指標部分預設指向none
def getitem(self):
return self._item
def getnext(self):
return self._next
def setitem(self,newitem):
self._item = newitem
def setnext(self,newnext):
self._next=newnext
# 單連結串列
class singlelinkedlist():
def __init__(self):
self._head fgygole= none #初始化連結串列為空 始終指向連結串列的頭部
self._size = 0 # 連結串列大小
# 返回連結串列的大小
def size(self):
current = self._head
count = 0
while current != none:
count += 1
current = current.getnext()
return count
# 遍歷連結串列
def tr**el(self):
current = self._head
while currfgygoleent != none:
print(current.getitem())
current = current.getnext()
# 檢查連結串列是否為空
def isempty(self):
return self._head == none
# 在連結串列前端新增元素
def add(self,item):
temp = node(item) # 建立新的節點
temp.setnext(self._head) # 新建立的next指標指向_head
self._head = temp # _head指向新建立的指標
# 在連結串列尾部新增元素
def append(self,item):
temp = node(item)
if self.isempty():
self._head = temp # 若為空表就直接插入
else:
current = self._head
while current.getnext() != none:
current = current.getnext() # 遍歷列表
current.setnext(temp) # 此時current為連結串列最後的元素,在末尾插入
# 檢索元素是否在連結串列中
def search(self,item):
current = self._head
founditem = false
while current != none and not founditem:
if current.getitem() == item:
founditem = true
else:
current = current.getnext()
return founditem
# 索引元素在表中的位置
def index(self,item):
current = self._head
count = 0
found = none
while current != none and not found:
count += 1
if current.getitem() == item:
found = true
else:
current = current.getnext()
if found:
return count
else:
return -1 # 返回-1表示不存在
# 刪除表中的某項元素
def remove(self,item):
current = self._head
pre = none
while current!=none:
if current.getitem() == item:
if not pre:
self._head = current.getnext()
else:
pre.setnext(current.getnext())
break
else:
pre = current
程式設計客棧 curre程式設計客棧nt = current.getnext()
# 在連結串列任意位置插入元素
def insert(self,pos,item):
if pos <= 1:
self.add(item)
elif pos > self.size():
self.append(item)
else:
temp = node(item)
count = 1
pre = none
current = self._head
while count < pos:
count += 1
pre = current
current = current.getnext(程式設計客棧)
pre.setnext(temp)
temp.setnext(current)
if __name__=='__main__':
a=singlelinkedlist()
for i in range(1,10):
a.append(i)
print('連結串列的大小',a.size())
a.tr**el()
print(a.search(6))
print(a.index(5))
a.remove(4)
a.tr**el()
a.insert(4,100)
a.tr**el()
本文標題: python資料結構之單連結串列詳解
本文地址:
python 資料結構之單連結串列的實現
python 資料結構之單連結串列的實現 連結串列的定義 連結串列 linked list 是由一組被稱為結點的資料元素組成的資料結構,每個結點都包含結點本身的資訊和指向下一個結點的地址。由於每個結點都包含了可以連結起來的地址資訊,所以用一個變數就能夠訪問整個結點序列。也就是說,結點包含兩部分資訊 ...
Python資料結構之單連結串列
連結串列的定義 連結串列 linked list 是由一組被稱為結點的資料元素組成的資料結構,每個結點都包含結點本身的資訊和指向下一個結點的地址。由於每個結點都包含了可以連結起來的地址資訊,所以用一個變數就能夠訪問整個結點序列。也就是說,結點包含兩部分資訊 一部分用於儲存資料元素的值,稱為資訊域 另...
js資料結構之連結串列(單連結串列 雙向連結串列 迴圈連結串列)
首先,連結串列有以下特點 1.儲存空間不固定,可靈活擴充 2.方便多次的插入和刪除,效率較高 單連結串列 單連結串列是最常用的連結串列,其對資料的操作均為單項的,向後查詢的。連結串列 基於物件 此處為單連結串列 function node ele function linkedlist functi...
資料結構連結串列之單迴圈連結串列
在這裡,也設定一個頭指標。對於有著頭指標的單迴圈連結串列l,判斷l為空的條件為l next l,這是與單連結串列與迴圈連結串列不一樣的地方。除此之外,連結串列的最後一個節點指向頭結點。要注意的是,對迴圈連結串列進行操作的時候,需要注意連結串列為空的情況。常用操作的 為 迴圈列表 include in...
資料結構之連結串列 實現單連結串列的k逆序(2)
有一個單連結串列,請設計一個演算法,使得每k個節點之間逆序,如果最後不夠k個節點一組,則不調整最後幾個節點。例如連結串列1 2 3 4 5 6 7 8 null,k 3這個例子。調整後為,3 2 1 6 5 4 7 8 null。因為k 3,所以每三個節點之間逆序,但其中的7,8不調整,因為只有兩個...
資料結構之單連結串列與雙連結串列
一 單連結串列中的迴圈連結串列 目前我們的連結串列最後一個結點的pnext指向的是null 迴圈連結串列中的最後一個結點的pnext指向的是頭結點 迴圈連結串列和不是迴圈連結串列的區別 判斷條件不一樣!p pnext null p pnext pheader 二 單連結串列和陣列的區別 單連結串列的...
資料結構實驗之連結串列 單連結串列中重複元素的刪除(移位)
description 按照資料輸入的相反順序 逆位序 建立一個單連結串列,並將單連結串列中重複的元素刪除 值相同的元素只保留最後輸入的一個 input 第一行輸入元素個數 n 1 n 15 第二行輸入 n 個整數,保證在 int 範圍內。output 第一行輸出初始連結串列元素個數 第二行輸出按照...
資料結構之單連結串列和雙連結串列的區別
雙連結串列的在查詢 刪除的時候可以利用二分法的思想去實現,那麼這樣效率就會大大提高,但是為什麼目前市場應用上單連結串列的應用要比雙連結串列的應用要廣泛的多呢?從儲存效率上來考慮 雙連結串列具有以下優點 為什麼市場上單連結串列的使用多餘雙連結串列呢?從儲存結構來看,每個雙連結串列的節點要比單連結串列的...
python資料結構之 單向連結串列
連結串列又分為 單向迴圈連結串列 雙向連結串列 今天我們來詳細解釋一下單向連結串列,以及單向連結串列的實現!首先定義一個單向連結串列的節點的類 然後建立一個單連結串列的類 這樣兩個類都已經實現,接下來就是對單向連結串列的操作了!以下所寫的功能都是在單連結串列類的下面進行操作的!1.首先實現判斷連結串...
資料結構 鏈式儲存結構之單連結串列
二 單連結串列的宣告 三 單連結串列的初始化 三 插入操作 四 刪除操作 五 查詢單連結串列 六 連結串列的銷燬 順序儲存結構是像一條線一樣的儲存,在進行增刪改查時,能明確的知道每個資料都是一個後面就是下一個。那如果資料沒有按線性儲存該如何查詢資料呢?有一堆資料在一塊記憶體中是隨意儲存的,那如果想把...