golang標準庫 雙向鍊錶(list)

2021-09-23 10:25:14 字數 3086 閱讀 4237

鍊錶結構大家都不陌生了,與陣列一樣都是儲存資料用的,形成互補。鍊錶增刪快,查詢慢,陣列查詢快,增刪慢;兩者各有各的應用場景。go語言標準庫中實現了雙向鍊錶和環形鍊錶兩種鍊錶結構

雙向鍊錶位於go標準庫:container/list

type list struct
root 為鍊錶的根元素,len為鍊錶的長度。

go提供list.new方法建立乙個鍊錶,返回乙個鍊錶指標。

func new() *list

package main

import (

"container/list"

)func main()

下面介紹鍊錶的各個方法(增刪改查) 

往鍊錶的頭部插入乙個元素,返回插入元素的值的指標。

func (l *

list

) pushfront(v inte***ce{}) *

element

元素element的結構如下:

type element struct // value為當前元素所儲存的值

}

func main()
往鍊錶的尾部插入乙個元素,返回插入元素的值的指標。

func (l *

list

) pushback(v inte***ce{}) *

element

func main() 

}

執行結果如下 

// 返回鍊錶的第乙個元素或nil

func (l *

list

) back() *

element // 返回鍊錶的最後乙個元素或nil

func main()
結果如下:

// 往mark元素後插入乙個元素

func (l *

list

) insertbefore(v inte***ce{}, mark *

element

) *element

// 往mark元素前插入乙個元素

func main() 

}

結果如下:

) // 將元素移動到鍊錶頭部

func (l *

list

) movetoback(e *

element

) // 將元素移動到鍊錶尾部

func (l *

list

) movebefore(e, mark *

element

) // 將e元素移動到mark元素前面

func (l *

list

) moveafter(e, mark *

element

) // 將e元素移動到mark元素後

func main() 

}

結果如下:

) inte***ce{} // 刪除e元素

func (l *

list

) init() *

list

// 將鍊錶清空

func main() 

log.println(l.len())

}

結果如下:

func (l *list) pushfrontlist(other *list) // 將other鍊錶追加到l鍊錶的頭部

func (l *list) pushbacklist(other *list) // 將other鍊錶追加到l鍊錶的末尾

func main() 

}

結果如下:

至此,list雙向鍊錶的api算是介紹完了,還有乙個上面沒有用到的方法

func (e *element) prev() *element // 返回當前元素的前乙個元素,跟next方法一樣,只是順序不同而已

mysql 雙向鍊錶 雙向鍊錶

雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...

golang使用雙向鍊錶實現LRU演算法

使用雙向鍊錶實現的lru演算法 type lrucache struct 鍊錶節點 type dbnode struct 雙向鍊錶 type dblist struct 往鍊錶頭部插入資料 if node nil d.mutex.rlock defer d.mutex.runlock if d.si...

雙向鍊錶(鍊錶)

雙向鍊錶 每個節點包含指向後繼節點的指標和指向前驅節點的指標。繼承關係圖 實體圖 duallinklist.h duallinklist 雙向鍊錶類模板 成員變數 node 節點實體 m header 頭節點 m length 鍊錶長度 m step 步進長度 m current 當前節點前乙個節點...