golang数据结构之双链表
目录结构:
doubleLink.go
package link import (
"fmt"
) //HerosNode 链表节点
type HerosNode struct {
ID int
Name string
pre *HerosNode //指针
next *HerosNode //指针
} //InsertHerosNode 插入
func InsertHerosNode(head *HerosNode, newHerosNode *HerosNode) {
tmp := head
for {
if tmp.next == nil {
break
}
tmp = tmp.next
}
tmp.next = newHerosNode
newHerosNode.pre = tmp
} //InsertHerosNodeByID 根据id从小到大插入
func InsertHerosNodeByID(head *HerosNode, newHerosNode *HerosNode) {
tmp := head for {
if tmp.next == nil {
tmp.next = newHerosNode
newHerosNode.pre = tmp
break
}
if tmp.next.ID > newHerosNode.ID {
tmp.next.pre = newHerosNode
newHerosNode.pre = tmp
tmp2 := tmp.next
tmp.next = newHerosNode
newHerosNode.next = tmp2
break
} else if tmp.next.ID == newHerosNode.ID {
fmt.Printf("已经存在id为%d的节点\n", tmp.next.ID)
break
} else {
tmp = tmp.next
}
} } //DeleteHerosNode 删除
func DeleteHerosNode(head *HerosNode, 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
tmp2.pre = tmp
}
break
} else {
tmp = tmp.next
}
}
} //FindHerosNode 查找
func FindHerosNode(head *HerosNode, 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
}
}
} //ModifyHerosNode 修改
func ModifyHerosNode(head *HerosNode, 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
}
}
} //ForListHerosNode 显示信息
func ForListHerosNode(forHead *HerosNode) {
fmt.Println("正向打印所有信息")
tmp := forHead
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
}
}
} //BackListHerosNode 显示信息
func BackListHerosNode(head *HerosNode) {
fmt.Println("----------------------")
fmt.Println("反向打印所有信息")
tmp := head
if tmp.next == nil {
fmt.Println("链表为空")
return
}
var backHead *HerosNode
for {
tmp = tmp.next
if tmp.next == nil {
backHead = tmp
break
}
}
for {
fmt.Printf("节点信息如下:id=%d,name=%s\n", backHead.ID, backHead.Name)
backHead = backHead.pre
if backHead.pre == head {
fmt.Printf("节点信息如下:id=%d,name=%s\n", backHead.ID, backHead.Name)
fmt.Println("已显示所有信息")
break
}
}
}
main.go
package main import "go_code/data_structure/link" func main() { head := &link.HerosNode{}
hero1 := &link.HerosNode{
ID: ,
Name: "宋江",
}
hero2 := &link.HerosNode{
ID: ,
Name: "李逵",
}
hero4 := &link.HerosNode{
ID: ,
Name: "林冲",
}
hero3 := &link.HerosNode{
ID: ,
Name: "武松",
}
// link.InsertHerosNode(head, hero1)
// link.InsertHerosNode(head, hero2)
// link.InsertHerosNode(head, hero4)
// link.InsertHerosNode(head, hero3) link.InsertHerosNodeByID(head, hero2)
link.InsertHerosNodeByID(head, hero1)
link.InsertHerosNodeByID(head, hero4)
link.InsertHerosNodeByID(head, hero3)
link.DeleteHerosNode(head, )
link.FindHerosNode(head, )
link.ModifyHerosNode(head, , "我是修改后的英雄")
link.ForListHerosNode(head)
link.BackListHerosNode(head)
}
运行结果:
golang数据结构之双链表的更多相关文章
- Java 数据结构之双链表
package Linked; public class Mylinked { private Node first;//链表的第一个节点 private Node last;//链表的最后一个节点 ...
- golang数据结构之单链表
实现单链表的增删查改. 目录如下: singleLink.go package link import ( "fmt" ) //HeroNode 链表节点 type HeroNod ...
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- C# 数据结构 - 单链表 双链表 环形链表
链表特点(单链表 双链表) 优点:插入和删除非常快.因为单链表只需要修改Next指向的节点,双链表只需要指向Next和Prev的节点就可以完成插入和删除操作. 缺点:当需要查找某一个节点的时候就需要一 ...
- 深入理解Redis 数据结构—双链表
在 Redis 数据类型中的列表list,对数据的添加和删除常用的命令有 lpush,rpush,lpop,rpop,其中 l 表示在左侧,r 表示在右侧,可以在左右两侧做添加和删除操作,说明这是一个 ...
- [C++11][数据结构]自己的双链表实现
这个双链表,是我模仿stl的list制作的,只实现了一些基本功能,像merge,transfer这些就没有实现,用户可以用基本操作来自己做外部实现. 我没有选用stl的[begin,end)迭代器模式 ...
- 数据结构(C达到)------- 双链表
双链表中的每个节点包含两个指针域,指针域包含其后继节点的内存地址,还有一个指针所存储的存储器地址其领域前驱节点. 双向链表结点的类型描写叙述: //双向链表的类型描写叙述 typedef int El ...
- 数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)
链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链表. 链表分为单链表.双链表.循环链表. 一.单链表 插入:链表中插入一个节点的效率很高.向链表中插 ...
- Python与数据结构[0] -> 链表/LinkedList[1] -> 双链表与循环双链表的 Python 实现
双链表 / Doubly Linked List 目录 双链表 循环双链表 1 双链表 双链表和单链表的不同之处在于,双链表需要多增加一个域(C语言),即在Python中需要多增加一个属性,用于存储指 ...
随机推荐
- Android 项目优化(二):启动页面优化
一.启动页黑屏的问题 1.1 问题现象描述 Android App 启动页面黑屏的问题,现象表现为:Android 开发 App 启动时若没有做特殊处理的话,会出现一瞬间的白屏现象.即使启动页界面就加 ...
- Git问题汇总
1.fatal: refusing to merge unrelated histories $git pull origin master --allow-unrelated-histories 2 ...
- source insight 3 常用设置
总结了一些source insight的一些常用设置,这些设置需求因人而异,自己用的顺手的才是最好的. 1.括号配对高亮“在前括号左侧,后括号左侧”双击鼠标左键,可以选定匹配括号和其中内容(<& ...
- python浅见 (Python 3000)
1.该版本不考虑向下兼容 2.下载地址: https://www.python.org/downloads/source/ # tar -zxvf Python-3.6.1.tgz # cd Pyth ...
- 编译原理之LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- Java8_map新增方法
参考博客 https://irusist.github.io/2016/01/04/Java-8%E4%B9%8BMap%E6%96%B0%E5%A2%9E%E6%96%B9%E6%B3%95/#ge ...
- 21.决策树(ID3/C4.5/CART)
总览 算法 功能 树结构 特征选择 连续值处理 缺失值处理 剪枝 ID3 分类 多叉树 信息增益 不支持 不支持 不支持 C4.5 分类 多叉树 信息增益比 支持 ...
- SpringSession header/cookie/attribute存放 session id
SpringSession header/cookie/attribute存放 SessionID(死磕) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长 ...
- 02-Nginx配置
一.Nginx配置 1.创建Nginx运行使用的用户 www: / usr / sbin / groupadd www / usr / sbin / useradd -g www www 2.检查配置 ...
- laravel 5.5.39 升级到 5.5.45 出现 cookie 序列化异常问题的解决
把项目里的 laravel 5.5.39 升级到 5.5.45 后,出现如下报错: ErrorExceptionopenssl_encrypt() expects parameter 1 to be ...