golang 实现单链表
发布时间:2020-12-16 18:24:26 所属栏目:大数据 来源:网络整理
导读:package main//链表实现import ( "fmt" "os")//定义错误常量const ( ERROR = -1000000001)//定义元素类型type Element int64//定义节点type LinkNode struct { Data Element //数据域 Nest *LinkNode //指针域,指向下一个节点}//函数接口type LinkNoder int
package main //链表实现 import ( "fmt" "os" ) //定义错误常量 const ( ERROR = -1000000001 ) //定义元素类型 type Element int64 //定义节点 type LinkNode struct { Data Element //数据域 Nest *LinkNode //指针域,指向下一个节点 } //函数接口 type LinkNoder interface { Add(head *LinkNode,new *LinkNode) //后面添加 Delete(head *LinkNode,index int) //删除指定index位置元素 Insert(head *LinkNode,index int,data Element) //在指定index位置插入元素 GetLength(head *LinkNode) int //获取长度 Search(head *LinkNode,data Element) //查询元素的位置 GetData(head *LinkNode,index int) Element //获取指定index位置的元素 } //添加 头结点,数据 func Add(head *LinkNode,data Element) { point := head //临时指针 for point.Nest != nil { point = point.Nest //移位 } var node LinkNode //新节点 point.Nest = &node //赋值 node.Data = data head.Data = Element(GetLength(head)) //打印全部的数据 if GetLength(head) > 1 { Traverse(head) } } //删除 头结点 index 位置 func Delete(head *LinkNode,index int) Element { //判断index合法性 if index < 0 || index > GetLength(head) { fmt.Println("please check index") return ERROR } else { point := head for i := 0; i < index-1; i++ { point = point.Nest //移位 } point.Nest = point.Nest.Nest //赋值 data := point.Nest.Data return data } } //插入 头结点 index位置 data元素 func Insert(head *LinkNode,data Element) { //检验index合法性 if index < 0 || index > GetLength(head) { fmt.Println("please check index") } else { point := head for i := 0; i < index-1; i++ { point = point.Nest //移位 } var node LinkNode //新节点,赋值 node.Data = data node.Nest = point.Nest point.Nest = &node } } //获取长度 头结点 func GetLength(head *LinkNode) int { point := head var length int for point.Nest != nil { length++ point = point.Nest } return length } //搜索 头结点 data元素 func Search(head *LinkNode,data Element) { point := head index := 0 for point.Nest != nil { if point.Data == data { fmt.Println(data,"exist at",index,"th") break } else { index++ point = point.Nest if index > GetLength(head)-1 { fmt.Println(data,"not exist at") break } continue } } } //获取data 头结点 index位置 func GetData(head *LinkNode,index int) Element { point := head if index < 0 || index > GetLength(head) { fmt.Println("please check index") return ERROR } else { for i := 0; i < index; i++ { point = point.Nest } return point.Data } } //遍历 头结点 func Traverse(head *LinkNode) { point := head.Nest for point.Nest != nil { fmt.Println(point.Data) point = point.Nest } fmt.Println("Traverse OK!") } //主函数测试 func main() { var head LinkNode = LinkNode{Data: 0,Nest: nil} head.Data = 0 var nodeArray []Element for i := 0; i < 10; i++ { nodeArray = append(nodeArray,Element(i+1+i*100)) Add(&head,nodeArray[i]) } Delete(&head,3) Search(&head,2032) Insert(&head,23,10010) Traverse(&head) fmt.Println("data is",GetData(&head,6)) fmt.Println("length:",GetLength(&head)) os.Exit(0) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |