資料結構 鍊錶操作 單向鍊錶

2021-09-24 10:04:32 字數 4495 閱讀 3292

資料結構中的鍊錶基本操作,我這裡是也是為了學習記錄我自己的書寫的**過程.其中包含取鍊錶的新建,新增元素,刪除元素,取指定索引值,向元素尾部追加元素 等等!

資料結構中的鍊錶基本操作,我這裡是也是為了學習記錄我自己的書寫的**過程.其中包含取鍊錶的新建,新增元素,刪除元素,取指定索引值,向元素尾部追加元素 等等!

//定義乙個鍊錶的節點結構

type listnode struct

}

//構造乙個鍊錶的結構

type linkedlist struct

func

newlistnode

(v inte***ce

)*listnode

}

//獲取下乙個元素

func

(this *listnode)

getnext()

*listnode

//取當前的節點值

func

(this *listnode)

getvalue()

inte***ce

//建立乙個鍊錶結構

func

newlinkedlist()

*linkedlist

}

//在末乙個節點後面插入乙個節點 返回bool

func

(this *linkedlist)

insertafter

(p *listnode, v inte***ce

)bool

newnode :=

newlistnode

(v) oldnext := p.next

p.next = newnode

//把舊的節點移到新的節點下乙個元素

newnode.next = oldnext

//增加節點長度

this.length++

return

true

}

//插入當前節點的前置節點 返回bool

func

(this *linkedlist)

insertbefore

(p *listnode, v inte***ce

)bool

cur := this.head.next

pre := this.head

for cur !=

nil pre = cur

cur = cur.next

}if cur ==

nil newnode :=

newlistnode

(v) pre.next = newnode

newnode.next = cur

this.length++

return

true

}

func

(this *linkedlist)

print()

} fmt.

println

(format)

}

//在鍊錶頭部插入節點 返回 bool

func

(this *linkedlist)

inserttohead

(v inte***ce

)bool

func

(this *linkedlist)

inserttotail

(v inte***ce

)bool

//最後插入尾部

return this.

insertafter

(cur, v)

}

//給出指定索引查詢對應節點

func

(this *linkedlist)

findbyindex

(index uint

)*listnode

//取的第乙個節點

cur := this.head.next

var i uint=0

for; i < index; i++

return cur

}

//刪除的傳入的節點 返回bool

func

(this *linkedlist)

deletenode

(p *listnode)

bool

//取當前節點

cur := this.head.next

//頭節點 就是我們叫的前置節點

pre := this.head

//迴圈鍊錶

for cur !=

nil pre = cur

cur = cur.next

}//當前節點==nil 就沒有找到要刪除的節點

if cur ==

nil//做刪除操作 就是把前置節點下乙個節點 替換掉

pre.next = p.next

//然後釋放掉刪除的幾點

p =nil//減少鍊錶的長度

this.length--

return

true

}

測試方法我上面都追加有測試的命令.可以測試使用

//go test -v -run testlinkedlist_insertafter -o singlelinkedlist_test.go

//結果:9->8->7->6->5->4->3->2->1

func

testlinkedlist_insertafter

(t *testing.t)

l.print()

}//go test -v -run testlinkedlist_insertbefore -o singlelinkedlist_test.go

//結果:9999->9->8->7->6->5->4->3->2->1

func

testlinkedlist_insertbefore

(t *testing.t)

l.insertbefore

(l.head.next,

9999

) l.

insertbefore

(l.head.next,

8888

) l.head.next)

l.print()

}//go test -v -run testlinkedlist_findbyindex -o singlelinkedlist_test.go

func

testlinkedlist_findbyindex

(t *testing.t)

l.insertbefore

(l.head.next,

9999

) l.

insertbefore

(l.head.next,

8888

) t.

log(l.head.next)

t.log

(l.findbyindex(0

))t.log

(l.findbyindex(20

))}//go test -v -run testlinkedlist_deletenode -o singlelinkedlist_test.go

//刪除節點測試

func

testlinkedlist_deletenode

(t *testing.t)

//初始列印

l.print()

//第一次刪除列印

t.log

(l.deletenode

(l.head.next)

) l.

print()

//第二次刪除列印 (這個地方應該是刪除失敗的.經過第一次刪除,第二次刪除已經沒有第二個節點了.所以會刪除失敗的)

t.log

(l.deletenode

(l.head.next.next)

) l.

print()

}//go test -v -run testlinkedlist_inserttotail -o singlelinkedlist_test.go

//測試插入節點尾部

//結果:1<-2<-3<-4<-5<-6<-7<-8<-9<-10<-11<-12<-13<-14<-15<-16<-17<-18<-19<-20<-21<-22<-23<-24<-25<-26<-27<-28<-29

func

testlinkedlist_inserttotail

(t *testing.t)

l.print()

}

資料結構 單向鍊錶操作

鍊錶操作 單向鍊錶 include include 定義鍊錶 typedef struct lnodelnode 建立單鏈表 頭插法 lnode creatlisthead lnode l return l 尾插法 lnode creatlistend lnode l r next null ret...

資料結構 單向鍊錶

鍊錶結構的資料格式儲存 include stdafx.h 把這行放在最開始。include includeusing namespace std typedef struct data typedef struct node 這裡與上面的不同是多了node,注意如果沒有這個node,下面的struc...

資料結構(單向鍊錶)

ifndef linklist h define linklist h 鍊錶節點 template class linklistdata linklistdata linklistdata 獲取資料 t getdata public t data 資料 template class linklist...