Go 雙向鍊錶

2021-09-24 02:17:45 字數 1953 閱讀 3983

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點,相對於單鏈表來講:往前往後遍歷都很方便。

相對於單向鍊錶優勢:

​插入資料

刪除資料

實現了基本的雙向鍊錶功能,包括元素的插入、刪除、移動功能

package main

import (

"container/list"

"fmt"

)func main()

}

型別元素

func (e *element) next() *element //返回該元素的下乙個元素,如果沒有下乙個元素則返回nil。

func (e *element) prev() *element//返回該元素的前乙個元素,如果沒有前乙個元素則返回nil。

型別列表

func new() *list //返回乙個初始化的list

func (l *list) back() *element //獲取list l的最後乙個元素

func (l *list) front() *element //獲取list l的第乙個元素

func (l *list) init() *list //list l初始化或者清除list l

func (l *list) insertafter(v inte***ce{}, mark *element) *element //在list l中元素mark之後插入乙個值為v的元素,並返回該元素,如果mark不是list中元素,則list不改變。

func (l *list) insertbefore(v inte***ce{}, mark *element) *element//在list l中元素mark之前插入乙個值為v的元素,並返回該元素,如果mark不是list中元素,則list不改變。

func (l *list) len() int //獲取list l的長度

func (l *list) moveafter(e, mark *element) //將元素e移動到元素mark之後,如果元素e或者mark不屬於list l,或者emark,則list l不改變。

func (l *list) movebefore(e, mark *element)//將元素e移動到元素mark之前,如果元素e或者mark不屬於list l,或者emark,則list l不改變。

func (l *list) movetoback(e *element)//將元素e移動到list l的末尾,如果e不屬於list l,則list不改變。

func (l *list) movetofront(e *element)//將元素e移動到list l的首部,如果e不屬於list l,則list不改變。

func (l *list) pushback(v inte***ce{}) *element//在list l的末尾插入值為v的元素,並返回該元素。

func (l *list) pushbacklist(other *list)//在list l的尾部插入另外乙個list,其中l和other可以相等。

func (l *list) pushfront(v inte***ce{}) *element//在list l的首部插入值為v的元素,並返回該元素。

func (l *list) pushfrontlist(other *list)//在list l的首部插入另外乙個list,其中l和other可以相等。

詳見: container/list

小結:

由於container/list不是併發安全的,可以通過加鎖(sync.mutex)來解決。

雙向鍊錶的優點在於快速插入和刪除,適用於頻繁插入、刪除的場景。和slice、陣列比,slice、陣列的優勢在於查詢和遍歷,適用於頻發查詢、遍歷的場景。

links

mysql 雙向鍊錶 雙向鍊錶

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

雙向鍊錶(鍊錶)

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

雙向鍊錶 3 反轉雙向鍊錶

雙向鍊錶的反轉過程,可以參考下面的例圖。a 原始雙向鍊錶 b 反轉後的雙向鍊錶 下面是乙個用於反轉雙向鍊錶的簡單方法。所需要做的事情就是交換每個節點的前向指標和後向指標,然後調整鍊錶的頭指標和尾指標。include struct node 對鍊錶進行反轉 void reverse node head...