链表

链表(Linked list),是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

每个节点包含下一个节点的地址,这样把所有的节点串起来了,通常把 链表中的第一个节点叫做链表头

单链表

package main

import (
"fmt"
) type test struct {
name string
age uint8
intro string
next *test
} func printList(str *test) {
for str != nil {
fmt.Println(*str)
str = str.next
}
} func main() {
var test1 test
test1.name = "zhangsan"
test1.age = 123
test1.intro = "dasdasd" var test2 test
test2.name = "lisi"
test2.age = 33
test2.intro = "dadasdasdsdasd" test1.next = &test2 printList(&test1)
}

链表的头部插入

package main

import (
"fmt"
"math/rand"
) type test struct {
name string
age int
intro string
next *test
} func printlist(list *test) {
for list != nil {
fmt.Println(*list)
list = list.next
}
} func insertTop(list *test) {
for n := 0; n < 10; n++ {
var student *test = &test{
name: fmt.Sprintf("stu_%d", n),
age: rand.Intn(100),
intro: fmt.Sprintf("stu_dasdasdas_%d", n),
}
student.next = list //将student的next插入到list之前,即stu.next=list
list = student //将stu赋值为list // list.next = student.next
}
printlist(list)
} func main() { var stu *test = &test{
name: "lisi",
age: rand.Intn(100),
intro: "aaaaaaaaaaaaa",
} insertTop(stu) }

package main

import (
"fmt"
"math/rand"
) type test struct {
name string
age int
intro string
next *test
} func printlist(list *test) {
for list != nil {
fmt.Println(*list)
list = list.next
}
} func insertTop(list **test) { //指针的指针 for n := 0; n <= 10; n++ {
var student *test = &test{
name: fmt.Sprintf("stu_%d", n),
age: rand.Intn(100),
intro: fmt.Sprintf("stu__%d", n),
} student.next = *list
*list = student
}
} func main() {
var stu *test = &test{
name: "lisi",
age: rand.Intn(100),
intro: "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊",
} insertTop(&stu)
printlist(stu)
}

尾部插入

package main

import (
"fmt"
"math/rand"
) type test struct {
name string
age int
intro string
next *test
} func printlist(list *test) {
for list != nil {
fmt.Println(*list)
list = list.next
}
} func insertTail(list *test) { var test1 = list
for n := 0; n <= 10; n++ {
student := test{
name: fmt.Sprintf("stu_%d", n),
age: rand.Intn(100),
intro: fmt.Sprintf("stustustustustustustu%d", n),
} test1.next = &student
test1 = &student
}
} func main() { var stu = test{
name: "zhangsan",
age: 16,
intro: "zhangsanlisi",
} insertTail(&stu)
fmt.Println(&stu) }

golang基础数据结构链表的更多相关文章

  1. golang基础数据结构

    一.概述: 这里主要讨论四种类型---数组.slice.map和结构体 数组和结构体是聚合类型:它们的值都是由很多个元素或者成员字段的值组成.数组是有同构元素组成--每个数组的元素的类型相同:结构体为 ...

  2. 数据结构和算法(Golang实现)(12)常见数据结构-链表

    链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点 ...

  3. C语言 - 基础数据结构和算法 - 企业链表

    听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...

  4. C语言 - 基础数据结构和算法 - 单向链表

    听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...

  5. Redis 基础数据结构之二 list(列表)

    Redis 有 5 种基础数据结构,分别为:string (字符串).list (列表).set (集合).hash (哈希) 和 zset (有序集合). 今天来说一下list(列表)这种数据结构, ...

  6. golang基础知识之encoding/json package

    golang基础知识之json 简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.可以去json.org 查看json标准的清晰定义.json pack ...

  7. GoLang基础数据类型-切片(slice)详解

    GoLang基础数据类型-切片(slice)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数 ...

  8. GoLang基础数据类型--->数组(array)详解

    GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...

  9. Python 数据结构 链表

    什么是时间复杂度 时间频度:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才知道.但是我们不可能也没有必要对每一个算法都进行上机测试,只需要知道那个算法花费的时间多,那个算法花费得 ...

随机推荐

  1. vue中eventbus被多次触发(vue中使用eventbus踩过的坑)【bus.$on事件被多次绑定】

    问题描述:只要页面没有强制刷新,存在组件切换,bus.$on方法会被多次绑定,造成事件多次触发   触发bus.$on中绑定的方法.png   bus.$on多次绑定.png 解决办法:在每次调用方法 ...

  2. Mark 韦氏拼音 邮政式拼音 和汉语拼音

    一直感觉很多大学名字不像是汉语拼音也不像是英文,百度了下原来是三种不同的拼音方式: 转载百度百科: 邮政式拼音和威妥玛拼音法并未完全消失.北京大学(Peking University).清华大学(Ts ...

  3. Oracle数据库导入导出 imp/exp备份还原

    Oracle数据导入导出imp/exp   Oracle数据导入导出imp/exp 在cmd的dos命令提示符下执行,而不是在sqlplus里面,但是格式一定要类似于:   imp/exp 用户名/密 ...

  4. BZOJ3963 WF2011MachineWorks(动态规划+斜率优化+cdq分治)

    按卖出时间排序后,设f[i]为买下第i台机器后的当前最大收益,则显然有f[i]=max{f[j]+gj*(di-dj-1)+rj-pi},且若此值<0,应设为-inf以表示无法购买第i台机器. ...

  5. linq 分组取各组最大值

    static List<User> list1 = new List<User>() { new User(){id=1,name="张三"}, new U ...

  6. UVa - 12050

    A palindrome is a word, number, or phrase that reads the same forwards as backwards. For example,the ...

  7. MT【221】几个常用的多元恒等式

    1.$\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{n}{a_ib_j}=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{n}{a_j ...

  8. 调用系统命令之subprocess模块

    除了常见的os.system和os.popen方法,官方强烈推荐使用subprocess来调用系统命令. 这个库用起来其实很简单,按照惯例先贴一下官文关键点: The subprocess modul ...

  9. SDL OPENGL 在linux ubuntu示例

    gl画纹理texture /* * SDL OpenGL Tutorial. * (c) Michael Vance, 2000 * briareos@lokigames.com * * Distri ...

  10. 洛谷P2680 运输计划

    大概就是二分+树上差分... 题意:给你树上m条路径,你要把一条边权变为0,使最长的路径最短. 最大的最小,看出二分(事实上我并没有看出来...) 然后二分k,对于所有大于k的边,树上差分求出最长公共 ...