最近在学习golang中的链表,记录一下学习,golang中没有java、php中的类,只有通过C语言吸收过来的struct这个类型,不过有类似的功能:
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。
package main
import (
"fmt"
"math/rand"
)
//定义老师学生模型
type Student struct {
Name string
Age int
Score float64
Next * Student
}
func main() {
test()
}
//测试尾部插入的方法
func test(){
//初始化头指针
header:=new(Student)
header.Name="zq2019"
header.Age=18
header.Score=88
InsertTail(header)
trans(header)
}
//在尾部插入
func InsertTail(header*Student){
tail:=header
number:=10
for i:=0;i<number;i++{
stu:=Student{
Name:fmt.Sprintf("zq%d",i),
Age:rand.Intn(100),
Score:rand.Float64()*100,
}
tail.Next=&stu
tail=&stu
}
}
//遍历链表
func trans(header*Student){
for header!=nil{
fmt.Println(*header)
header=header.Next
}
fmt.Println()
}
运行结果:
头部插入法:
/**
头部插入法
*/
func InserHeader(header**Student) {
fmt.Println()
number:=10
for i:=0;i<number;i++{
stu:=Student{
Name:fmt.Sprintf("zq%d",i),
Age:rand.Intn(100),
Score:rand.Float64()*100,
}
stu.Next=*header
*header=&stu
}
}
调用:
func main(){
header:=new(Student)
header.Name="zq2019"
header.Age=18
header.Score=88
InserHeader(&header)
trans(header)
}
运行结果: