1. 程式人生 > >Golang之單鏈表實現

Golang之單鏈表實現

break tps aca icu idt 基本 nfa 測試 line

一.單鏈表基本概念

單鏈表是一種順序存儲的結構。
有一個頭結點,沒有值域,只有連域,專門存放第一個結點的地址。
有一個尾結點,有值域,也有鏈域,鏈域值始終為NULL。
所以,在單鏈表中為找第i個結點或數據元素,必須先找到第i - 1 結點或數據元素,而且必須知道頭結點,否者整個鏈表無法訪問。

關於鏈表的概念,此處不細講了,具體的內容,大家可以自行查找相關數據結構資料.

本文主要通過Golang實現鏈表的幾種常見操作:

  1. 判斷是否為空的單鏈表

  2. 單鏈表的長度

  3. 從頭部添加元素

  4. 從尾部添加元素

  5. 在指定位置添加元素

  6. 刪除指定元素

  7. 刪除指定位置的元素

  8. 查看是否包含某個元素

  9. 遍歷所有元素


二.實現代碼以及代碼註釋

1. 定義結構體

package linkedList

import "fmt"

type Object interface{}

type Node struct {
   Data Object //定義數據域
   Next *Node  //定義地址域(指向下一個表的地址)
}

type List struct {
   headNode *Node //頭節點
}


2.判斷鏈表是否為空

技術分享圖片


3. 獲取列表長度

func (this *List) Length() int {
   //獲取鏈表頭結點
   cur := this.headNode
   //定義一個計數器,初始值為0
   count := 0

   for cur != nil {
      //如果頭節點不為空,則count++
      count ++
      //對地址進行逐個位移
      cur = cur.Next
   }
   return count
}


4.從鏈表頭部添加元素

func (this *List) Add(data Object) *Node {
   node := &Node{Data: data}
   node.Next = this.headNode
   this.headNode = node
   return node
}


5. 從鏈表尾部添加元素

技術分享圖片


6. 在鏈表指定位置添加元素

技術分享圖片

7. 刪除鏈表指定值的元素

技術分享圖片

8.刪除指定位置的元素

技術分享圖片

9.查看鏈表是否包含某個元素

技術分享圖片

10. 遍歷鏈表所有節點

技術分享圖片

三.測試代碼與效果

  1. 創建並向鏈表中添加元素

測試代碼:


技術分享圖片

測試結果:

技術分享圖片

2. 判斷鏈表是否為空

測試代碼:

list2 := linkedList.List{}
fmt.Printf("list 是否為空鏈表:%t\n", list.IsEmpty())
fmt.Printf("list2 是否為空鏈表:%t\n", list2.IsEmpty())


測試結果:

技術分享圖片

3. 在指定位置index=5,value=b處插入元素five_insert_value

list.Insert(5,"five_insert_value")
fmt.Print("鏈表List當前的數值為:")
list.ShowList()


技術分享圖片

4. 是否包含元素five_insert_value

測試代碼:

isContain := list.Contain("five_insert_value")
fmt.Printf("isContain[five_insert_value]:%t",isContain)


測試結果:

isContain[five_insert_value]:true

5. 刪除元素five_insert_value

測試代碼:

list.Remove("five_insert_value")
fmt.Print("鏈表List當前的數值為:")
list.ShowList()
fmt.Println()


測試結果

鏈表List當前的數值為:   beforeHead 1  2  3  4  a  b  c  d



6.從位置3刪除元素index=3,value=3


//註意此時的headNode是值為beforeHead的元素
list.RemoveAtIndex(3)
fmt.Print("鏈表List當前的數值為:")
list.ShowList()
fmt.Println()


測試結果

鏈表List當前的數值為:   beforeHead 1  2  4  a  b  c  d


註明:區塊鏈學習聯盟是本人開設的微信公眾號,所以此處仍申明為原創。

Golang之單鏈表實現