博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang 实现单链表
阅读量:5835 次
发布时间:2019-06-18

本文共 3280 字,大约阅读时间需要 10 分钟。

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, index int, 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)}

转载地址:http://gbycx.baihongyu.com/

你可能感兴趣的文章
hive列转行
查看>>
GridView编辑删除操作
查看>>
二叉树的三种遍历的应用(表达式,求深度,叶子数,结点数,二叉树的建立,复制)...
查看>>
说说JSON和JSONP,也许你会豁然开朗
查看>>
依据道路的shape获得high_cross和low_cross
查看>>
SAE+Java+jetty
查看>>
Java 权限框架 Shiro 实战一:理论基础
查看>>
大话数据结构之四(串)
查看>>
加热炉简是新来的整个系统的板
查看>>
Mockito使用注意事项
查看>>
[LeetCode] Palindrome Linked List 回文链表
查看>>
UVA - 825Walking on the Safe Side(dp)
查看>>
android大概是通过logcat拦截Log
查看>>
android HDMI 清晰度 分辨率
查看>>
Codeforces 480C Riding in a Lift dp
查看>>
JQuery发送Put、Delete请求 - 摘自网络
查看>>
Android基于mAppWidget实现手绘地图(九)–如何处理地图对象的touch事件
查看>>
关于codeMirror插件使用的一个坑
查看>>
瞎子摸象与刻舟求剑
查看>>
多个相同name的文本输入框,输入其中一个后,使剩下的不能输入值
查看>>