GO學習系列 list

2021-08-03 09:48:23 字數 1492 閱讀 4319

最近工作中使用go語言,記錄一下學習中的一些收穫。

list.go

go中的list實現方法比較特殊,為乙個環形的雙向鍊錶,乙個root節點。

... -> root -> node1 -> node2 -> ...

... <- root <- node1 <- node2 <- ...

能夠比較快速的得到鍊錶首/尾節點。

以後在需要使用list的時候可以考慮這種形式。

type element struct  // go中任意型別的值,相當於void*,

// 變數名首字母大寫,表示對外可見 }

type list struct

常用的函式:

func (e *element) next() *element }

func (e *element) prev() *element 

func (l *list) init() *list

func new() *list

func (l *list) len() int

func (l *list) front *element

return l.root.next }

func (l *list) back() *element

func (l *list) lazyinit() }

func (l *list) insert(e, at *element) *element  

func (l *list) insertvalue(v inte***ce{}, at *element) *element , at)} 

func (l *list) remove(e *element) *element

func (l *list) remove(e *element) inte***ce{}

return e.value

}func (l *list) pushfront(v inte***ce{}) *element

func (l *list) insertbefore(v inte***ce{}, mark *element) *element

func (l *list) insertafter(v inte***ce{}, mark *element) *element

func (l *list) movetofront(e *element)

l.insert(l.remove(e), &l.root)

}func (l *list) movetoback(e *element)

func (l *list) movebefore(e, mark *element)

func (l *list) moveafter(e, mark *element)

func (l *list) pushbacklist(other *list)

func (l *list) pushfrontlist(other *list)

可以自己寫一遍函式實現

Redis學習系列三List列表

一 簡介 redis中的列表相當於c 中的linkedlist,也就是鍊錶,如果你研究過鍊錶這個資料結構,肯定知道.它的插入和刪除是非常快的,但是定位卻很慢,因為必須遍歷所有的元素,才能找到對應的值,所以當你需要對列表進行統計的時候,建立跑後台服務去做,而不是使用redis去遍歷,因為開銷很大.re...

go語言列表list

在 go 語言中,將列表使用 container list 包來實現,內部的實現原理是雙鏈表。列表能夠高效地進行任意位置的元素插入和刪除操作。list 的初始化有兩種方法 new 和宣告。兩種方法的初始化效果都是一致的。通過 container list 包的 new 方法初始化 list 變數名 ...

Go語言學習系列 序言

在好久之前就說要學go語言的,中間斷斷續續的學了點,但是都沒有系統的學習,也沒有好好的整理自己學習的東西,而且工作沒有用到,到現在慢慢的許多都忘記了,從現在開始開始拾起開始學習go語言。go語言的官網為 go語言官網的文件中開頭就指明了go程式語言是開源的語言,正式因為這個原因,所有就學起了go語言...