基于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)
}

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值