密码学-链表
數據結構鏈表
下面我們來寫一個單向的簡單鏈表,首先我們要聲明一個頭節點是為了保存頭節點信息,同理聲明一個當前節點保存當前節點的信息,再然后聲明一個節點類型的結構體,里面有兩個變量,一個是節點的存儲數據,數據類型為字符串,另一個是下一個節點的地址數據類型節點的指針類型。(package LinkNodes的內容寫在LinkNodes文件夾下的node.go文件中)
package LinkNodesimport "fmt"//聲明全局變量,保存頭節點var head *Nodevar curr *Node //當前節點//聲明節點類型type Node struct {//數據域Data string//地址域NextNode *Node}接下來我們首先創建一個頭節點,需要注意的是在設置完數據域和地址域后,要把頭節點信息賦予前面聲明的全局變量head,這個head變量在后面很多方法里我們都需要用到。
//創建頭節點func CreateHeadNode(data string) *Node {var node *Node = new(Node)// 設置數據結構體中的數據域node.Data = data//設置地址域node.NextNode = nil//保存頭節點head = nodecurr = nodereturn node}接下來我們來創建多種操作鏈表的方法:
//添加新節點func AddNode(data string) *Node {var newNode *Node = new(Node)//設置新節點重的數據域newNode.Data = data//設置地址域newNode.NextNode = nil//掛接節點curr.NextNode = newNodecurr = newNodereturn newNode}//遍歷鏈表func ShowNodes() {var node = headfor {if node.NextNode == nil {fmt.Println(node.Data)break} else {fmt.Println(node.Data)node = node.NextNode}}}//計算節點的個數func NodeCnt() int {var cnt = 1var node = headfor {if node.NextNode == nil {break} else {node = node.NextNodecnt++}}return cnt}//插入節點func InsertNodeByIndex(index int, data string) *Node {if index == 0 {//添加新的頭節點var node *Node = new(Node)node.Data = datahead = node} else if index > NodeCnt()-1 {//添加節點AddNode(data)} else {//中間插入節點var n = headfor i := 0; i < index-1; i++ {n = n.NextNode}var newNode *Node = new(Node)newNode.Data = datanewNode.NextNode = n.NextNoden.NextNode = newNode}return nil}//刪除節點func DeleteNodeByIndex(index int) {var node = headif index == 0 {//刪除頭節點,第二個節點為頭節點head = node.NextNode} else {for i := 0; i < index; i++ {node = node.NextNode}node.NextNode = node.NextNode.NextNode}}//修改指定下標的節點內容func UpdateNodeByIndex(index int, data string) {var node = headif index == 0 {head.Data = data} else {for i := 0; i < index; i++ {node = node.NextNode}node.Data = data}}接下來我們在主函數中使用這些方法:
package mainimport ("MyHashMap_簡單鏈表/LinkNodes""fmt" )func main() {fmt.Println("Hello World!")LinkNodes.CreateHeadNode("頭節點")LinkNodes.AddNode("第一節點")LinkNodes.AddNode("第二節點")LinkNodes.AddNode("第三節點")LinkNodes.AddNode("第四節點")LinkNodes.ShowNodes()fmt.Println("共有",LinkNodes.NodeCnt(),"個節點")fmt.Println("--------------------------------")//插入新節點LinkNodes.InsertNodeByIndex(2,"abc")LinkNodes.ShowNodes()//刪除節點fmt.Println("--------------------------------")LinkNodes.DeleteNodeByIndex(3)LinkNodes.ShowNodes()//修改節點內容fmt.Println("--------------------------------")LinkNodes.UpdateNodeByIndex(3,"abc")LinkNodes.ShowNodes() }輸出內容為:
Hello World! 頭節點 第一節點 第二節點 第三節點 第四節點 共有 5 個節點 -------------------------------- 頭節點 第一節點 abc 第二節點 第三節點 第四節點 -------------------------------- 頭節點 第一節點 第二節點 第三節點 第四節點 -------------------------------- 頭節點 第一節點 第二節點 abc 第四節點 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 密码学-hash散列表
- 下一篇: 链表-环形链表