基于golang对链表的简单实现和理解

最近在学习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)
}

运行结果:

在这里插入图片描述

发布了77 篇原创文章 · 获赞 2 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u014265398/article/details/90239714
今日推荐