分享下最近使用golang模拟的链表数据结构
2020-04-07 19:00
645 查看
首先,我们知道链表的特性,分别有单线链表和双线链表,下面我用golang来模拟了一个单线链表
链表的添加,他其实分别是有头部插入法和尾部插入法的,我在代码中都写了这两个方法
结构体 Student 是必须要有一个指针,这个指针是指向下一个链表的,当然,如果是双向链表的话,这里还需要记录一个头部指针,也就是说这个结构体会有两个指针
[code]type Student struct { Name string Age int Score float32 next *Student }
一个小细节:在插入某一个节点,比如 a b c 三个节点,我需要插入一个d 在 a 和 b 之间,这时候遍历到b 之后再进行插入,不然你如果在a的时候就开始进行插入操作,那么你是获取不到b节点的尾部的
双向链表
完整的代码:
[code]package main import ( "fmt" "math/rand" ) /* 链表的结构 */ type Student struct { Name string Age int Score float32 next *Student } /* 尾部插入法 */ func insertTail(p *Student) { var tail = p // 初始化节点 for i := 0; i < 10; i++ { stu := Student{ Name: fmt.Sprintf("stu%d", i), Age: rand.Intn(100), Score: rand.Float32() * 100, } tail.next = &stu tail = &stu // 需要把tail弄到新的节点重新初始化 } } /* 遍历链表 */ func trans(p *Student) { for p != nil { fmt.Println(*p) p = p.next } } /* 头部插入法 */ func insertHead(p **Student) { for i := 0; i < 10; i++ { stu := Student{ Name: fmt.Sprintf("stu%d", i), Age: rand.Intn(100), Score: rand.Float32() * 100, } stu.next = *p *p = &stu } } /* 删除节点 这里会有个问题,就是头节点不能删除 */ func delNode(p *Student) { var prev *Student = p // 这个是临时变量,保存上一个节点 for p != nil { if p.Name == "stu6" { prev.next = p.next // 上一个节点就等于下一个节点 break } prev = p // 这个是记录每次循环中的自己 p = p.next } } /* 在指定节点插入一个节点 */ func addNode(p *Student, newNode *Student) { for p != nil { if p.Name == "stu5" { newNode.next = p.next //新节点的next等于当前节点的next p.next = newNode // 当前节点的next等于新节点的结构体 break } p = p.next } } func main() { var head *Student = new(Student) // 头节点 head.Age = 18 head.Score = 99 head.Name = "asdsad" insertHead(&head) // 添加一些节点 循环去添加吧,模拟 delNode(&head) // 删除某一个链表 var newNode *Student = new(Student) // 插入一个节点 newNode.Age = 18 newNode.Score = 99 newNode.Name = "stu1000" addNode(head, newNode) // 插入节点 trans(head) // 遍历 }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 使用java实现双向链表数据结构
- C/C++基本数据结构:链表的基本使用和实现
- oracle之异常处理···最近在学oracle·分享供大家学习使用
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
- 数据结构-邻接链表的建立和使用
- Lua中使用table实现的其它5种数据结构(数组、链表、队列、集合和包、StringBuild)
- python数据结构学习笔记-2016-10-28-02-使用链表实现稀疏矩阵
- JavaScript数据结构之双向链表定义与使用方法示例
- SQLServer 维护脚本分享(03)数据库中记录CPU最近N分钟内的使用情况
- 有段时间没有更新博客了,最近比较忙,今天和大家分享一个使用Swift实现的新特性功能吧
- bootstrap-fileinput 插件使用总结(最近做项目应用到了这个上传文件的插件,分享下不够完善请指出共同进步)
- 使用JavaScript实现链表的数据结构的代码
- #使用链表这个数据结构,对一组数据进行插入排序
- (摘)面向对象c++数据结构之基本数据结构-链表-使用链表管理器(连载中)
- 最近整理的SqlHelper入门使用实例分享给大家
- 使用Java使用数据结构中的单链表
- 关于数据结构的学习经验分享 (链表相关的内容)
- 文章分享:简单数据结构学习:单向链表
- 练习使用链表数据结构解决一件小问题
- 数据结构(二):线性表的使用原则以及链表的应用-稀疏矩阵的三元组表示