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

栏目: Go · 发布时间: 6年前

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

兄弟连教育 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)

}


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Sprint

Sprint

Jake Knapp、John Zeratsky、Braden Kowitz / Simon & Schuster / 2016-3-8 / GBP 14.60

媒体推荐 “Every business leader I know worries about the same thing: Are we moving fast enough? The genius of Jake Knapp’s Sprint is its step-by-step breakdown of what it takes to solve big problems an......一起来看看 《Sprint》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具