重温一遍数据结构之单链表(golang版)
生活随笔
收集整理的這篇文章主要介紹了
重温一遍数据结构之单链表(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版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构—栈/队列
- 下一篇: Windows基本路由配置(cmd/ro