兄弟连区块链培训教程分享Go语言golang单链表实现

兄弟连区块链培训 · · 657 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

  目前而言区块链是一门新兴前沿行业,但也是一门综合复杂性强的学科,学习区块链需要有一定的学习能力与知识基础。然而很多线下培训机构却只顾收取高额报名费用,将用户的实际情况置若罔闻,不设报名门槛,不对报名人员进行甄别筛选,实则是一种不负责任的态度。

  兄弟连教育Go全栈与区块链培训课程已从多层面颠覆传统培训机构运营思维,区块链课程的开设在一定程度上加大了大众对这一专业领域的认知,其构建起的区块链世界也必将在未来为我们呈现更加高效的生活方式。


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)

}


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:兄弟连区块链培训

查看原文:兄弟连区块链培训教程分享Go语言golang单链表实现

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

657 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传