Golang语言学习从入门到实战----链表定义

在这里插入图片描述

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>}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值