Go標準函式庫的container/list
鏈結串列API用法如下。
container/list
實作了雙鏈結串列(doubly linked list),為有序非連續記憶體空間儲存的資料結構,每個元素(element)/節點(node)除了資料外還記錄前一個與後一個元素的指標。
下面範例說明container/list
常用的API用法。
list.New()
建立新的鏈結串列物件list.List
。List.Len()
返回鏈結串列的元素數目。List.PushBack(v any)
把值放入新元素並插在鏈結串列的最後並返回該元素物件list.Element
。List.PushFront(v any)
把值放入新元素並插在鏈結串列的最前並返回該元素物件。Element.Prev()
返回前一個元素。Element.Next()
返回後一個元素。Element.Value
取得元素儲存值。List.Remove(e *Element)
從串列中移除指定元素。List.InsertAfter(v any, mark *Element)
將值放入新元素並插在指定元素後List.InsertBefore(v any, mark *Element)
將值放入新元素並插在指定元素後List.Front()
取得串列的第一個元素。
main.go
package main
import (
"container/list"
"fmt"
)
func main() {
// 註解的括號為串列所含元素狀態
l := list.New() // 建立一個鏈結串列物件 ([])
fmt.Println(l.Len()) // 0
e := l.PushBack("b") // 在串列最後插入一個元素並返回該元素(節點)e ([b])
fmt.Println(e.Value) // b
l.PushFront("a") // 在串列最前插入一個元素 ([a, b])
l.PushBack("c") // ([a, b, c])
fmt.Println(l.Len()) // 3
pe := e.Prev() // 取得元素e的上一個元素
if pe != nil {
fmt.Println(pe.Value) // a
}
ne := e.Next() // 取得元素e的下一個元素
if ne != nil {
fmt.Println(ne.Value) // c
}
l.Remove(e) // 移除元素e ([a, c])
fmt.Println(l.Len()) // 2
l.InsertAfter("d", ne) // 在ne元素後插入d ([a, c, d])
l.InsertBefore("b", ne) // 在ne元素後插入b ([a, b, c, d])
// 遍歷串列元素並印出儲存值
for e := l.Front(); e != nil; e = e.Next() {
fmt.Print(e.Value) // abcd
}
}
沒有留言:
張貼留言