資料結構與演算法 (二)鍊錶多種形式對比總結

2021-09-30 19:30:30 字數 1916 閱讀 3892

在上一章中,我們對比了順序表和煉表,知道,鍊錶其實是由若干個含結點構成,其結點包括資訊域和指標域。形成乙個單向鏈結線性表。類似如下結構

而根據單鏈表結構結合實際問題又延伸出來靜態鍊錶,雙向鍊錶,迴圈鍊錶這三種主要鍊錶形式。

從定義和資料結構對比

2.從基本操作對比(橫著順序)

單向迴圈列表

//刪除頭結點的**如下:(注意:刪除操作的 初始條件 為 該佇列 不為空)

int delete(queueq,intelem)

(單鏈表的python實現)

這裡進行操作之前,靜態鍊錶需要進行可用空間初始化。 是所有的鍊錶都需要還是靜態鍊錶需要???

拓展-關於鍊錶的應用例項

用迴圈鍊錶求解約瑟夫問題

約瑟夫問題:

n個人圍成乙個圓圈,首先,第1個人從1開始,順時針報數, 報到第m個人,令其出列。然後再從下乙個人開始,從1順時針報數,報到第m個人,再令其出列,…,如此下去, 直到圓圈中只剩乙個人為止。此人即為優勝者。

演算法基本思路?用什麼資料結構?

#約瑟夫問題, 有n個人,從第m個開始報數,數到k的人出局,不斷迴圈,直到剩下乙個人即勝利,

#每次迴圈報數out乙個編號,最後剩下的survivor便是遊戲獲勝者。

def joseph(n,m,k):

if k==1:

print("survive",n)

return

queue=list(range(1,n+1)) #因為range函式是從0開始計數

while len(queue)!=1:

death=(n+k-1)%len(queue)#要出列的號碼

for i in range(n-1): # 如果是全部都出列,是迴圈n次的,因為我們是要知道最後乙個人,所以是n-1次

print("out!",queue[death]) #f[n] = (f[n-1] + m)%n //m表示每次數到該數的人出列,n表示當前序列的總人數

del queue[death]

death=(death+k-1)%len(queue)

print("survivor",queue)

if __name__=='__main__':

joseph(8,1,4)

多項式的代數計算

考慮用python來實現

資料結構與演算法 鍊錶

題目 合併兩個已經排序好的鍊錶 非遞迴和遞迴兩種 方法1 cpp view plain copy print color 000000 合併鍊錶.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct listnod...

資料結構與演算法 鍊錶

在講述鍊錶之前讓我們對資料結構進行乙個簡單的回顧 我們知道,資料結構指的是描述實際問題中各個資料項節點之間的前後邏輯結構關係,即要麼是線性結構 即某一資料項的前繼節點和後繼節點有且只有乙個 要麼是非線性結構 即某一資料節點的前驅或者後繼節點不止乙個 在確定了實際資料項的資料結構之後,我們要採用某種儲...

資料結構與演算法 鍊錶

反轉鍊錶 def reverse head q none p heap while p temp p.next p.next q q pp temp return p判斷鍊錶環 def meetingnode head if not head return slow head fast head.n...