go语言结构体实现简单的链表与二叉树

本文通过Go语言详细介绍了链表与二叉树这两种基本数据结构的实现过程。包括链表的头部和尾部插入法,以及二叉树的构建与遍历。通过具体的代码示例帮助读者理解这些数据结构的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.链表
(1) 头部插入法

//实现链表结构
package main 

import (
	"fmt"
	"math/rand"
)

type Student struct {
	Name string
	age  int
	score int
	//指向下一个结构体的指针地址
	next *Student
}

func main () {
	var head Student
	head.Name = "zhangsan"
	head.age = 18
	head.score = 99

	//2. 头部插入法
	tail := &head
	for i := 0; i < 10; i++ {
		stu := Student {
			Name: fmt.Sprintf("stu%d", i),
			age:rand.Intn(30),
			score:rand.Intn(100),
		} 
		//fmt.Println(stu)
		stu.next = tail
		tail = &stu
	}

	//遍历移动链表元素
	trans(tail)

}

//struct 是值类型,要想改变其值,只有传递指针
func trans (p *Student) {
	for {
		if p != nil {
			fmt.Println(*p)
			p = (*p).next
		} 
	}
}

(2) 尾部插入法

//实现链表结构
package main 

import (
	"fmt"
	"math/rand"
)

type Student struct {
	Name string
	age  int
	score int
	//指向下一个结构体的指针地址
	next *Student
}

func main () {
	var head Student
	head.Name = "zhangsan"
	head.age = 18
	head.score = 99

	//1.尾部插入节点,尾部插入法
	 tail := &head
	 //生成新的Student
	 for i := 0; i < 10; i++ {
		stu := &Student {
			Name:fmt.Sprintf("%s%d", "stu", i),
	 		age:rand.Intn(30),
	 		score:rand.Intn(100),
		} 
	 	tail.next = stu
		tail = stu	
	}

	//遍历移动链表元素
	trans(tail)

}

//struct 是值类型,要想改变其值,只有传递指针
func trans (p *Student) {
	for {
		if p != nil {
			fmt.Println(*p)
			p = (*p).next
		} 
	}
}

2.二叉树

//二叉树
package main 

import "fmt"

type demotree struct {
	name string
	//指向左子树的指针
	left  *demotree
	//指向右子树的指针
	right *demotree
}

//遍历二叉树
func trans (d *demotree) {

	//前序遍历
	fmt.Println(d)
	if d.left != nil {
		trans(d.left)
	}

	if d.right != nil {
		trans(d.right)
	}

}

func main () {
	var root demotree
	root.name = "a"
	
	var left demotree
	left.name = "b"
	root.left = &left

	var right demotree
	right.name = "c"
	root.right = &right

	var left2 demotree
	left2.name = "d"
	left.left  = &left2

	trans(&root)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值