Hello,我是普通Gopher,00后男孩,极致的共享主义者,想要成为一个终身学习者。专注于做最通俗易懂的计算机基础知识类公众号。每天推送Golang技术干货,内容起于K8S而不止于K8S,涉及Docker、微服务、DevOps、数据库、虚拟化等云计算内容及SRE经验总结
=======================
初次见面,我为你准备了100G学习大礼包:
1、《百余本最新计算机电子图书》
2、《30G Golang学习视频》
3、《20G Java学习视频》
4、《90G Liunx高级学习视频》
5、《10G 算法(含蓝桥杯真题)学习视频》
6、《英语四级,周杰伦歌曲免费送!》
路过麻烦动动小手,点个关注,持续更新技术文章与资料!
链表
1. 链表定义
// 每个节点包含下一个节点的地址, 这样把所有的节点都串起来了, 通常把链表中的第一个节点叫做链表头
type Student struct {
Name string
Next* Student
}
定义一个简单的链表
package main
import "fmt"
// 定义一个链表结构
type Student struct {
Name string
Age int
Score float32
next* Student
}
func main() {
// 定义一个头结点
var head Student
head.Name = "hua"
head.Age = 18
head.Score = 100
var stu1 Student
stu1.Name = "stu1"
stu1.Age = 20
stu1.Score = 20
// 将两个结点链接起来
head.next = &stu1
var p *Student = &head // p指向链表的头部
for p != nil {
fmt.Println(*p)
p = p.next
}
}
输出:
{hua 18 100 0xc000054330}
{stu1 20 20 <nil>}
2. 尾部插入法
package main
import (
"fmt"
"math/rand"
)
// 每个节点包含下一个节点的地址, 这样把所有的节点都串起来了, 通常把链表中的第一个节点叫做链表头
// 定义一个链表结构
type Student struct {
Name string
Age int
Score float32
next* Student
}
func trans(p *Student) {
for p!=nil{
fmt.Println(*p)
p = p.next
}
}
func main() {
var head Student
head.Name = "hua"
head.Age = 18
head.Score = 100
// 尾部插入法
var tail = &head
for i := 0; i < 10; i++ {
var stu = Student{
Name: fmt.Sprintf("stu%d", i),
Age: rand.Intn(100),
Score: rand.Float32()*100,
}
tail.next = &stu
tail = &stu
}
trans(&head)
}
输出:
{hua 18 100 0xc0000a6360}
{stu0 81 94.05091 0xc0000a6390}
{stu1 47 43.77142 0xc0000a63c0}
{stu2 81 68.682304 0xc0000a63f0}
{stu3 25 15.651925 0xc0000a6420}
{stu4 56 30.091187 0xc0000a6450}
{stu5 94 81.36399 0xc0000a6480}
{stu6 62 38.06572 0xc0000a64b0}
{stu7 28 46.888985 0xc0000a64e0}
{stu8 11 29.310184 0xc0000a6510}
{stu9 37 21.855305 <nil>}
3. 头部插入法
package main
import (
"fmt"
"math/rand"
)
// 每个节点包含下一个节点的地址, 这样把所有的节点都串起来了, 通常把链表中的第一个节点叫做链表头
// 定义一个链表结构
type Student struct {
Name string
Age int
Score float32
next* Student
}
func trans(p *Student) {
for p!=nil{
fmt.Println(*p)
p = p.next
}
}
func main() {
var head *Student = new(Student)
head.Name = "hua"
head.Age = 18
head.Score = 100
// 头部插入法
for i := 0; i < 10; i++ {
stu := Student{
Name: fmt.Sprintf("stu%d", i),
Age: rand.Intn(100),
Score: rand.Float32()*100,
}
stu.next = head
head = &stu
}
trans(head)
}
输出:
{stu9 37 21.855305 0xc000054510}
{stu8 11 29.310184 0xc0000544e0}
{stu7 28 46.888985 0xc0000544b0}
{stu6 62 38.06572 0xc000054480}
{stu5 94 81.36399 0xc000054450}
{stu4 56 30.091187 0xc000054420}
{stu3 25 15.651925 0xc0000543f0}
{stu2 81 68.682304 0xc0000543c0}
{stu1 47 43.77142 0xc000054390}
{stu0 81 94.05091 0xc000054360}
{hua 18 100 <nil>}