日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重温一遍数据结构之单链表(golang版)

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重温一遍数据结构之单链表(golang版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明

上一篇說的是線性表中的順序存儲結構,他的讀取復雜度雖然是o(1),但是它的缺點也很明顯,插入和刪除需要移動很多元素,而且需要分配一塊連續的內存區域

線性表之單鏈表

單鏈表在一定程度上解決了一部分上面的問題,而且也不要一大塊連續的內存區域,代碼如下

package main//線性表中的鏈式存儲結構 //第一個節點為頭節點,并不真實保存數據,頭節點基本代表了整個鏈表import ("fmt" )type Elem inttype LinkNode struct {Data ElemNext *LinkNode }//生成頭節點 func New() *LinkNode {//下面的data可以用來表示鏈表的長度return &LinkNode{0, nil} }//在鏈表的第i個位置前插入一個元素e,復雜度為o(n) func (head *LinkNode) Insert(i int, e Elem) bool {p := headj := 1for nil != p && j < i {p = p.Nextj++}if nil == p || j > i {fmt.Println("pls check i:", i)return false}s := &LinkNode{Data: e}s.Next = p.Nextp.Next = sreturn true }//遍歷鏈表 func (head *LinkNode) Traverse() {point := head.Nextfor nil != point {fmt.Println(point.Data)point = point.Next}fmt.Println("--------done----------") }//刪除鏈表中第i個節點,復雜度為o(n) func (head *LinkNode) Delete(i int) bool {p := headj := 1for (nil != p && j < i) {p = p.Nextj++}if nil == p || j > i {fmt.Println("pls check i:", i)return false}p.Next = p.Next.Nextreturn true }// 獲取鏈表中的第i個元素,復雜度為o(n) func (head *LinkNode) Get(i int) Elem {p := head.Nextfor j:= 1; j< i ;j++ {if nil == p {//表示返回錯誤return -100001}p=p.Next}return p.Data }func main() {linkedList := New()linkedList.Insert(1, 9)linkedList.Insert(1, 99)linkedList.Insert(1, 999)linkedList.Insert(1, 9999)linkedList.Insert(1, 99999)linkedList.Insert(1, 999999)linkedList.Traverse()linkedList.Delete(4)linkedList.Traverse()e := linkedList.Get(4)fmt.Println(e) }

總結

以上是生活随笔為你收集整理的重温一遍数据结构之单链表(golang版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。