欢迎访问 生活随笔!

生活随笔

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

编程问答

密码学-链表

发布时间:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的这篇文章主要介绍了 密码学-链表 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

数据结构链表

下面我们来写一个单向的简单链表,首先我们要声明一个头节点是为了保存头节点信息,同理声明一个当前节点保存当前节点的信息,再然后声明一个节点类型的结构体,里面有两个变量,一个是节点的存储数据,数据类型为字符串,另一个是下一个节点的地址数据类型节点的指针类型。(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位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的密码学-链表的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。