資料結構中的鍊錶基本操作,我這裡是也是為了學習記錄我自己的書寫的**過程.其中包含取鍊錶的新建,新增元素,刪除元素,取指定索引值,向元素尾部追加元素 等等!
資料結構中的鍊錶基本操作,我這裡是也是為了學習記錄我自己的書寫的**過程.其中包含取鍊錶的新建,新增元素,刪除元素,取指定索引值,向元素尾部追加元素 等等!
//定義乙個鍊錶的節點結構
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...