实现单链表的增删查改。

目录如下:

singleLink.go

package link

import (
"fmt"
) //HeroNode 链表节点
type HeroNode struct {
ID int
Name string
next *HeroNode //指针
} //InsertHeroNode 插入
func InsertHeroNode(head *HeroNode, newHeroNode *HeroNode) {
tmp := head
for {
if tmp.next == nil {
break
}
tmp = tmp.next
}
tmp.next = newHeroNode
} //InsertHeroNodeByID 根据id从小到大插入
func InsertHeroNodeByID(head *HeroNode, newHeroNode *HeroNode) {
tmp := head for {
if tmp.next == nil {
tmp.next = newHeroNode
break
}
if tmp.next.ID > newHeroNode.ID {
tmp2 := tmp.next
tmp.next = newHeroNode
newHeroNode.next = tmp2
break
} else if tmp.next.ID == newHeroNode.ID {
fmt.Printf("已经存在id为%d的节点\n", tmp.next.ID)
break
} else {
tmp = tmp.next
}
} } //DeleteHeroNode 删除
func DeleteHeroNode(head *HeroNode, ID int) {
tmp := head
for {
if tmp.next == nil {
fmt.Println("链表中没有该id")
break
}
if tmp.next.ID == ID {
if tmp.next.next == nil {
tmp.next = nil
} else {
tmp2 := tmp.next.next
tmp.next = tmp2
}
break
} else {
tmp = tmp.next
}
}
} //FindHeroNode 查找
func FindHeroNode(head *HeroNode, ID int) {
tmp := head
for {
if tmp.next == nil {
fmt.Println("链表中没有该id")
break
}
if tmp.next.ID == ID {
fmt.Println("找到了该id")
break
} else {
tmp = tmp.next
}
}
} //ModifyHeroNode 修改
func ModifyHeroNode(head *HeroNode, ID int, changeName string) {
tmp := head
for {
if tmp.next == nil {
fmt.Println("链表中没有该id")
break
}
if tmp.next.ID == ID {
tmp.next.Name = changeName
break
} else {
tmp = tmp.next
}
}
} //ListHeroNode 显示信息
func ListHeroNode(head *HeroNode) {
tmp := head
if tmp.next == nil {
fmt.Println("链表为空")
return
}
for {
fmt.Printf("节点信息如下:id=%d,name=%s\n", tmp.next.ID, tmp.next.Name)
tmp = tmp.next
if tmp.next == nil {
fmt.Println("已显示所有信息")
break
}
}
}

main.go

package main

import "go_code/data_structure/link"

func main() {

    head := &link.HeroNode{}
hero1 := &link.HeroNode{
ID: ,
Name: "宋江",
}
hero2 := &link.HeroNode{
ID: ,
Name: "李逵",
}
hero4 := &link.HeroNode{
ID: ,
Name: "林冲",
}
hero3 := &link.HeroNode{
ID: ,
Name: "武松",
}
// link.InsertHeroNode(head, hero1)
// link.InsertHeroNode(head, hero2)
// link.InsertHeroNode(head, hero4)
// link.InsertHeroNode(head, hero3) link.InsertHeroNodeByID(head, hero2)
link.InsertHeroNodeByID(head, hero1)
link.InsertHeroNodeByID(head, hero4)
link.InsertHeroNodeByID(head, hero3)
link.DeleteHeroNode(head, )
link.FindHeroNode(head, )
link.ModifyHeroNode(head, , "我是修改后的英雄")
link.ListHeroNode(head)
}

运行结果:

golang数据结构之单链表的更多相关文章

  1. Python数据结构之单链表

    Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...

  2. javascript数据结构之单链表

    下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下. //数 ...

  3. 数据结构之单链表的实现-java

    一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...

  4. 数据结构之单链表(golang版)

    线性表之单链表 package main //线性表中的链式存储结构 //第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表 import ( "fmt" ) type ...

  5. python 数据结构之单链表的实现

    链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就 ...

  6. 数据结构(一) 单链表的实现-JAVA

    数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...

  7. 数据结构 - 静态单链表的实行(C语言)

    静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...

  8. 数据结构 - 动态单链表的实行(C语言)

    动态单链表的实现 1 单链表存储结构代码描述 若链表没有头结点,则头指针是指向第一个结点的指针. 若链表有头结点,则头指针是指向头结点的指针. 空链表的示意图: 带有头结点的单链表: 不带头结点的单链 ...

  9. 【数据结构】单链表介绍及leetcode206题反转单链表python实现

    题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...

随机推荐

  1. 推荐一个好用的行内可编辑的table组件 vxe-table

    项目中有一个需要用户点击table单元格可编辑的需求,由于博主用的是elementUI,element组件内实现可编辑,用过的小伙伴都知道,非常麻烦,后来博主在浏览组件的时候发现了 一款非常好用的ta ...

  2. MySQL Online DDL与DML并发阻塞关系总结

    MySQL DDL操作执行的三种方式 1,INPLACE,在进行DDL操作时,不影响表的读&写,可以正常执行表上的DML操作,避免与COPY方法相关的磁盘I/O和CPU周期,从而最小化数据库的 ...

  3. 基于Python的SQL Server数据库对象同步轻量级实现

    缘由 日常工作中经常遇到类似的问题:把某个服务器上的某些指定的表同步到另外一台服务器.类似需求用SSIS或者其他ETL工作很容易实现,比如用SSIS的话就可以,但会存在相当一部分反复的手工操作.建源的 ...

  4. java编译报错: 找不到或无法加载主类 Demo.class 的解决方法

    原因:java 命令后面的文件不能有后缀名. 解决方法:运行java时候,后面的文件去掉后缀名.

  5. JVM基础回顾记录(二):垃圾收集

    垃圾收集流程&HotSpot对该流程的实现方式 上一篇介绍了jvm的内存模型,本篇将介绍虚拟机中最为复杂的一部分:垃圾收集,本篇会从垃圾回收前的准备工作到后面的收集阶段的方式以及HotSpot ...

  6. Ubuntu18.04 下最好用的gif录制工具peek

    最近在写代码,需要找一个ubuntu下的录制屏幕工具,尝试了几个,发现peek是最好用的.这里就给大家推荐一下. 一 安装: 该软件是一个在gihtub上的开源软件,源码路径: https://git ...

  7. python强大的绘图模块matplotlib示例讲解

    Matplotlib 是 Python 的绘图库.作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的 ...

  8. SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录

    作者:Sans_ juejin.im/post/5d087d605188256de9779e64 一.说明 Shiro是一个安全框架,项目中主要用它做认证,授权,加密,以及用户的会话管理,虽然Shir ...

  9. AQS(AbstractQueuedSynchronizer)解析

    AbstractQueuedSynchronizer是JUC包下的一个重要的类,JUC下的关于锁相关的类(如:ReentrantLock)等大部分是以此为基础实现的.那么我们就来分析一下AQS的原理. ...

  10. PlayJava Day020

    1.异常Exception补充: ①错误(Error)指的是致命性错误,一般无法处理 ②异常以类的形式封装 程序可以处理的异常对应的类是java.lang.Exception及其子类 运行时异常对应的 ...