Golang之單鏈表實現
阿新 • • 發佈:2018-07-25
break tps aca icu idt 基本 nfa 測試 line 一.單鏈表基本概念
單鏈表是一種順序存儲的結構。
有一個頭結點,沒有值域,只有連域,專門存放第一個結點的地址。
有一個尾結點,有值域,也有鏈域,鏈域值始終為NULL。
所以,在單鏈表中為找第i個結點或數據元素,必須先找到第i - 1 結點或數據元素,而且必須知道頭結點,否者整個鏈表無法訪問。
關於鏈表的概念,此處不細講了,具體的內容,大家可以自行查找相關數據結構資料.
本文主要通過Golang實現鏈表的幾種常見操作:
判斷是否為空的單鏈表
單鏈表的長度
從頭部添加元素
從尾部添加元素
在指定位置添加元素
刪除指定元素
刪除指定位置的元素
查看是否包含某個元素
遍歷所有元素
二.實現代碼以及代碼註釋
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. 遍歷鏈表所有節點
三.測試代碼與效果
創建並向鏈表中添加元素
測試代碼:
測試結果:
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之單鏈表實現