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

链表

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>}
发布了140 篇原创文章 · 获赞 50 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43442524/article/details/104806730