go語言實現 雙向迴圈鍊錶

2021-08-20 07:15:56 字數 2372 閱讀 5458

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。

**如下:

package doublelinkedlist

import (

"errors"

"fmt"

)type elemtype inte***ce{}

//結點

type node struct

//鍊錶

type

list struct

//工廠函式

func createlist() *

list

}//尾插法

func (list

*list) pushback(x elemtype)

//頭插法

func (list

*list) pushfront(x elemtype)

list

.size++

}//尾刪法

func (list

*list) popback() bool

s :=

list

.last.pre //找到最後乙個節點的前驅

s.next =

list

.first

list

.last = s

list

.size--

return

true

}//頭刪法

func (list

*list) popfront() bool

s :=

list

.first.next //找到第乙個節點

list

.first.next = s.next

s.next.pre =

list

.first

iflist

.size ==

1 list

.size--

return

true

}//查詢指定元素

func (list

*list) find(x elemtype) *node else

}return nil

}//按值刪除結點

func (list

*list) deleteval(x elemtype) bool

return

true

}return

false

}//把值為x的元素的值修改為y

func (list

*list) modify(x, y elemtype) bool

return

false

}//判斷鍊錶是否為空

func (list

*list) isempty() bool

//反轉鍊錶

//保留第乙個結點,將剩餘的結點游離出來,然後依次頭插到保留的結點中

func (list

*list) reverse()

}}//列印鍊錶

func (list

*list) print() error

s :=

list

.first.next

for s !=

list

.first

fmt.println()

return nil

}

簡單使用了一下:

package main

import (

"learngo/lang/datastruct/doublelinkedlist"

)func main()

for _, v := range s

list.modify(5, 55)

list.print()

list.deleteval(7)

list.print()

list.popback()

list.print()

list.popfront()

list.print()

list.reverse()

list.print()

}

輸出結果:

1 2 3 4 55 6 7

1 2 3 4 55 6

1 2 3 4 55

2 3 4 55

55 4 3 2

參考文章:

雙向鍊錶的GO語言實現

一 什麼是雙向鍊錶 和單鏈表比較,雙向鍊錶的元素不但知道自己的下線,還知道自己的上線 越來越像傳銷組織了 小煤車開起來,圖裡面可以看出,每個車廂除了乙個指向後面車廂的箭頭外,還有乙個指向前面車廂的箭頭 車頭 車尾除外 車頭只有指向後面車廂的箭頭,車尾只有指向前面車廂的箭頭。二 雙向鍊錶與go的對應結...

C語言實現雙向迴圈鍊錶

list 雙向迴圈鍊錶,帶頭指標 struct list node 初始化頭指標 void list init head struct list node head 量表是否為空 是返回1,否返回0 int list is empty const struct list node head 鍊錶遍歷...

C語言實現雙向迴圈鍊錶

list 雙向迴圈鍊錶,帶頭指標 struct list node 初始化頭指標 void list init head struct list node head 量表是否為空 是返回1,否返回0 int list is empty const struct list node head 鍊錶遍歷...