生活随笔
收集整理的這篇文章主要介紹了
golang实现link的过程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
golang實現(xiàn)link
使用golang實現(xiàn)single link過程, 許久沒有編寫數(shù)據(jù)結構的實現(xiàn)方式, 編寫過程需要關注
link的關注點, 在進入函數(shù)的時候需要重新定義一個link指針;增加一個head進行判斷,會省去head節(jié)點的判斷, 浪費一個節(jié)點;link的next及next的判斷很關鍵;如果判斷失誤會出現(xiàn)for的死循環(huán);采用對象的方式編碼,先創(chuàng)建了一個head, 實現(xiàn)的功能包括:, - (l *link)IsEmpty
- (l *link)Delete()
- (l *link)Insert(v int) link有序存放;
- (l *link)Append(v int)
type link struct {val intnext *link
}func main() {fmt.Println("hello link")head := new(link)l := head// for i := 0; i < 10; i++ {// num := rand.Intn(100)// l.Append(num)// }rand.Seed(time.Now().UnixNano())for i := 0; i < 25; i++ {num := rand.Intn(100)l.Insert(num)}head.Prt()head.Delete(15)head.Delete(20)head.Delete(25)head.Prt()}func (l *link) Append(v int) {n := link{v, nil}last := lif last.next == nil {last.next = &n} else {for last.next != nil {last = last.next}last.next = &n}
}func (l *link) Insert(v int) {n := link{v, nil}ins := lflag := false // 初始未插入if ins.next == nil {ins.next = &n} else {for ins.next != nil {if n.val < ins.next.val { // 小于后節(jié)點,插入n.next = ins.nextins.next = &nflag = truebreak} else {ins = ins.next}}if flag == false {ins.next = &n}}
}func (l *link) Prt() {prt := l.nextfor prt.next != nil {fmt.Printf("%d ", prt.val)prt = prt.next}fmt.Println(prt.val)}func (l *link) IsEmpty() bool {if l.next != nil {return false}return true
}func (l *link) Delete(v int) {cur := lif cur.IsEmpty() == true {return}for cur.next != nil {if cur.next.val == v {fmt.Println("Delete value ", v)if cur.next.next != nil {cur.next = cur.next.next} else {cur.next = nil}}cur = cur.next}
}
轉載于:https://www.cnblogs.com/gpan/p/9841870.html
總結
以上是生活随笔為你收集整理的golang实现link的过程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。