python3怎麼建立乙個鍊錶 第二章 鍊錶(1)

2021-10-11 04:13:34 字數 3069 閱讀 1596

鍊錶是按線性單向序列排列的值的集合。與swift語言裡array等連續儲存資料結構相比,鍊錶在理論上具有兩個優勢:

如圖所示,鍊錶是乙個節點鏈。節點有兩個職責:

節點(node)

public class node

}extension node: customstringconvertible

return "(value) -> " + string(describing: next) + " "}}

導航到playground頁面並新增以下內容:

example(of: "creating and linking nodes")
上邊的**其實就是讓你建立了三個節點並將它們連線起來:

在控制台中,您應該看到以下輸出:

---example of creating and linking nodes---

1 -> 2 -> 3

就實用性而言,當前構建列表的方法還有很多不盡如人意的地方。您可以很容易地看到,以這種方式構建長列表是不切實際的。解決此問題的一種常見方法是構建管理node物件的linkedlist。讓我們繼續。

鍊錶(linkedlist)

在sources目錄中,建立乙個新檔案並將其命名為linkedlist.swift。將以下內容新增到檔案中:

public struct linkedlist

public var isempty: bool

}extension linkedlist: customstringconvertible

return string(describing: head)}}

鍊錶具有頭部和尾部的概念,分別指鍊錶的第乙個和最後乙個節點:

新增資料到列表中

push

在鍊錶前面新增值稱為push操作。這也稱為頭部優先插入。它的**非常簡單。 將以下方法新增到linkedlist:

public mutating func push(_ value: value) 

}

在push空鍊錶的情況下,新節點既是鍊錶的頭部,也是鍊錶的尾部。 返回playground頁面並新增以下內容:

example(of: "push")
你的控制台輸出應顯示以下內容:

---example of push---

1 -> 2 -> 3

guard !isempty else

tail!.next = node(value: value)

tail = tail!.next}

跳回playground,在底部寫下以下內容:

var list = linkedlist()

print(list)}

你在控制台中看到以下輸出:

1 -> 2 -> 3

insert(after:)

新增值的第三個也是最後乙個操作是insert(after:)。

public func node(at index: int) -> node? 

return currentnode

}

node(at:)將嘗試根據給定索引檢索列表中的節點。由於只能從head節點訪問列表的節點,因此必須進行迭代遍歷。以下是步驟: 1. 建立乙個新的head引用,並跟蹤當前遍歷的數量。 2. 使用while迴圈,你可以在列表中向下移動引用,直到達到所需的索引。空列表或超出界限的索引將導致nil返回值。

現在需要插入新節點。 在node(at:)正下方新增以下方法:

// 1

@discardableresult

public mutating func insert(_ value: value, after node: node) -> node

// 3

node.next = node(value: value, next: node.next)

return node.next!

}

以下是你所做的事情:

@discardableresult允許呼叫者忽略此方法的返回值,而編譯器不會上下跳警告你。

否則,只需將新節點與列表的其餘部分鏈結起來,然後返回新節點。

跳回playground頁面測試上述。將以下內容新增到playground底部:

example(of: "inserting at a particular index") 

print("after inserting: (list)")

}

你在控制台中看到以下輸出:

---example of inserting at a particular index---

before inserting: 1 -> 2 -> 3

after inserting: 1 -> 2 -> -1 -> -1 -> -1 -> -1 -> 3

效能分析棒!到目前為止你已經取得了很好的進步。簡單地說,你已經實現了向鏈結列表新增值的三個操作,以及在特定索引處查詢節點的方法。

建立乙個python鍊錶

鍊錶是一種由一系列節點組成的資料結構,每個節點都有指向下個節點的指標。這種結構就不需要連續的記憶體去儲存,但只要找到起始節點 頭節點 整個鍊錶的資料都可以被依次訪問。在python3中,建立鍊錶的過程可以粗略分為定義單節點,定義空鍊錶,向空鍊錶填充資料幾個步驟 來自定義單節點 class node ...

建立乙個鍊錶

不知道為什麼總是忘了對鍊錶的操作,主要就是平時用的少,希望自己通過寫這編文章能加深對鍊錶操作的印象 目錄1.首先得要有兩個基本的標頭檔案 2.再然後得要有個結構體 3.這部分是函式前置宣告 4.鍊錶初始化 5.插入節點 6.列印整個鍊錶 7.釋放整個鍊錶的記憶體 8.整個程式示例 9.列印結果 in...

python3實現鍊錶

a 鍊錶的結構為 b 鍊錶的實現方法 鍊錶結構實現 私有屬性 pro item是指向下個節點的指標,item為此節點的值 class chaindemo def init self,item none,pos item none self.item item self.pos item pos it...