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

17、Go语言结构体与方法详解 本文深入详解了Go语言中结构体的基础知识与高级用法。内容涵盖结构体的定义、初始化方式(包括使用new函数、直接声明和结构体字面量)、内存布局、递归结构体(如链表、双向链表和二叉树)、类型转换、工厂方法的使用、匿名字段与嵌入式结构体(模拟继承机制)、结构体方法(值接收器与指针接收器的区别)、结构体的比较与排序等实用技巧。同时,还介绍了结构体标签的使用(通过reflect包访问)以及自定义结构体包的创建和使用。通过这些内容,开发者可以更好地利用结构体来组织和管理数据,提高代码的可读性、可维护性和性能。 阅读详情

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

OLED的字模提取(保姆级)---基于PCtoLCD2013 做为一个刚刚开始接触编程不久的白菜,这个OLED想做一个信息显示,可是商家给我的例程里就是88,816两种字体的格式,我的屏幕是0.91寸的8*16的字体显示上感觉特别丢丢儿小,我就想整个大的,哎,只怪直接学习习惯不好,总是学一半,绕了好大一圈,才搞好,想写一篇博客,时刻提醒踏实学习,第一次写博客,小白一枚,勿喷。。 OLED屏幕驱动程序功能 我们对Markdown编辑器进行了一些功能拓展与语法支... 阅读详情

相关推荐

从零构建EtherCAT从站:SSC工具配置与TwinCAT3 PDO/SDO调试实战

本文详细介绍了从零构建EtherCAT从站的完整流程,重点讲解SSC工具配置与TwinCAT3 PDO/SDO调试实战。通过解析EtherCAT通信机制、PDO与SDO的核心概念,提供SSC工具配置技巧、XML文件生成与校验方法,以及TwinCAT3环境下的调试经验,帮助开发者高效完成EtherCAT从站开发与优化。

weixin_42520573的博客 342

GO结构体链表及二叉树

目录 存储方式 链表更新 链表实现增删改查 头部添加链表 尾添加链表 从中间任意添加链表 修改链表(1-2) 2、 修改结果 删除链表 二叉树 前序遍历 中序遍历——左根右 后序遍历——左右根 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑...

小柏ぁ的博客 636

解决OpenCASCADE性能瓶颈:显示加速与三角剖分优化全攻略

本文深入探讨OpenCASCADE在工业设计和CAD建模中的性能优化策略,重点解决显示加速与三角剖分等核心瓶颈问题。通过智能刷新控制、显示数据结构优化和动态LOD技术,显著提升渲染效率和交互体验,适用于复杂场景下的三维可视化应用。

weixin_30752699的博客 344

Go版数据结构 -【2.2 链表】

链表是一种常见的线性数据结构,与数组不同的是,链表中的元素并不存储在连续的内存空间中,而是通过指针连接在一起。 链表非常适合需要频繁插入、删除操作的场景,因为它不需要像数组那样频繁移动数据。

Swxctx 1553

VFH避障/局部路径规划算法

VFH避障/局部路径规划算法 本文章是我看《The Vector Field Histogram-Fast Obstacle Avoidance for Mobile Robots》论文时候的笔记,感兴趣的欢迎去看原论文。 VFH中有一些概念是从其他算法中借鉴过来的,并且VFH算法本身就是对VFF(Virtural Force Field)的一种改进,其中有很多的相似之处。所以按照原论文的思路,先介绍由CMU提出的Certainty Grid算法中的一些概念,再介绍一下势场法中的一些概念,接着介绍一下VFF

qq_41845878的博客 8120

RK3588开发笔记-5G模块(SIM8200、广和通FM160、移远RM500U)调试笔记

RK3588 CPU提供了丰富的外设接口,本文主要介绍通过usb3.0接口驱动5G模块来实现5g无线数据传输功能。在物联网和边缘计算领域,5G网络支持的高速率、低延时连接为应用带来了更多可能性。RK3588作为一款高性能SoC,适合用于5G联网应用。SIM8200广和通FM160和移远RM500U。在RK3588上调试5G模块可以为设备提供稳定的高速联网能力。本文介绍了如何配置和调试SIM8200、广和通FM160和移远RM500U模块,通过AT指令和QMI/MBIM工具实现5G数据连接。

flypig has a dream! 2676

Golang 链表详解

Golang 链表详解

wgchen 954

ardupilot BMI088加速度陀螺仪学习

本节主要记录ardupilot 中BMI088传感器的学习过程,欢迎批评指正。BMI088是一款高性能6轴惯性传感器,由16位数字三轴±24g加速度计和16位数字三轴±2000°/ s陀螺仪组成。 BMI088允许高精度测量方向和沿三个正交轴的运动检测。BMI088具有高振动鲁棒性和3 x 4.5 x0.95mm³的小尺寸,是用于无人机和机器人应用等恶劣环境的高性能IMU中的独特产品。 BMI088专门设计用于有效抑制由于PCB上的共振或整个系统的结构而可能发生的振动。 除了高振动稳定性外,BMI088的出

陌城烟雨 2057

Go语言数据结构-链表

linked list,由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。我们常说的链表,结构有单向链表、双向链表和环形链表。

jeremy_ke的博客 823

回归预测 | MATLAB实现TCN时间卷积神经网络多输入单输出回归预测

回归预测 | MATLAB实现TCN时间卷积神经网络多输入单输出回归预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2492

微信小程序码 createWxaCodeUnlimit 生成总是报错 41030 的解决方案

41030错误本质上就是路径不合法。路径多写了一个斜杠路径带了参数小程序版本未发布或 app.json 配置不一致。如果确认页面存在,可以通过来跳过检查。微信小程序 getUnlimitedQRCode 官方文档路径前不能加 /,参数放 scene,发布版本要有这个页面,不行就关掉 check_path。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 475

Go语言-【结构体】-使用结构体实现链表操作

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 使用链表结构可以避免在使用数组时需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。 链表允许插入和移除表上任意位置上的结点,

xyz的专栏 661

Electron vue3 - 使用SerialPort与串口交互教程,计算机串行端口(COM口、USB转串口等)进行通信连接读取或写入Arduino、单片机、PLC、扫码枪、打印机、老式调制解调器!

实战Electron使用SerialPort与串口交互详细全过程,Electron-vue3与串口交互示例,Electron vue使用serialport实现串口交互通讯,Electron-vue使用serialport连接本地串口,electron-vue 台称串口对接 SerialPort,electron串口调试工具,electron+vue+serialport实现串口通信,串口通信serialport使用和调试,electron-vue使用serialport串口通信及踩过的坑(已解决!)ele

🏆 前端领域优质创作者 4643

七. Go学习:排序、结构体、链表和二叉树

本文介绍了结构体这一自定义数据类型,以及排序(冒泡、简单选择、插入和快爬)、链表和二叉树这三种简单的数据结构(通过代码) 目录 排序 一. 冒泡排序 二. 简单选择排序 三. 插入排序 四. 快速排序 结构体 链表 二叉树 排序 一. 冒泡排序 冒泡排序:从小往上两两比较相邻记录的关键字,反序则交换,直至有序。最小数像泡泡一样从小往上走. package main import ( "fmt" ) func sortBuble(a []int) { for i := 0;

ouyangyiwen的博客 246

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Golang 结构体

前言 结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。 用结构体的经典案例:学校的学生信息,每个学生信息包含一个唯一的学生学号、学生的名字、学生的性别、家庭住址等等。所有的这些信息都需要绑定到一个实体中,可以作为一个整体单元被复制,作为函数的参数或返回值,或者是被存储到数组中,等等。 结构体也是值类型,因此可以通过 new 函数来创建。 组成结构体类型的那些数据称为字段(fields)。字段有以下特性: 字段拥有自己的类型和值。 字段名必须唯一。 字段的类型也可

李培冠的博客 9491

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

go结构体链表二叉树

链表就是 一个元素 通过指针连结 另一个元素, 元素之间在内存中不是连续的 定义结构体: type Student struct { Name string Age int32 Score float32 next *Student } 如上这种结构体, 有一个属性是指针类型的 这种结构体的多个变量, 就可以构成链表 现有三个Student变量ABC, ...

lljxk2008的博客 366

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Go:struct结构体和继承

struct结构体

海绵宝宝de派小星的博客 2338

GO语言系列(五)- 结构体和接口

结构体(Struct) Go中struct的特点 1. 用来自定义复杂数据结构 2. struct里面可以包含多个字段(属性) 3. struct类型可以定义方法,注意和函数的区分 4. struct类型是值类型 5. struct类型可以嵌套 6. Go语言没有class类型,只有struct类型 一、struct...

dian19881021的博客 1220

Go入门指南-10.1结构体定义

Go 语言中,结构体和它所包含的数据在内存中是以连续块的形式存在的,即使结构体中嵌套有其他的结构体,这在性能上带来了很大的优势。不像 Java 中的引用类型,一个对象和它里面包含的对象可能会在不同的内存空间中,这点和 Go 语言中的指针很像。当为结构体定义了一个 alias 类型时,此结构体类型和它的 alias 类型都有相同的底层类型,它们可以如示例 10.3 那样互相转换,同时需要注意其中非法赋值或转换引起的编译错误。节),一个导出的结构体类型中有些字段是导出的,另一些不是,这是可能的。

qq_45030264的博客 1096

『GoLang』结构体与方法

Go语言结构体和方法的简单介绍,这里我特别强调一句,肯定不全,有些小错误,在日后使用过程中慢慢发现其中的规则,后面的接口也是一样。

七秒钟的记忆 886

【Golang】结构体

使用 new 初始化:结构体的内存布局Go 语言中,结构体和它所包含的数据在内存中是以连续块的形式存在的,即使结构体中嵌套有其他的结构体,这在性能上带来了很大的优势。不像 Java 中的引用类型,一个对象和它里面包含的对象可能会在不同的内存空间中,这点和 Go 语言中的指针很像。递归结构体结构体类型可以通过引用自身来定义。这在定义链表或二叉树的元素(通常叫节点)时特别有用,此时节点包含指向临近节点的链接(地址)。如下所示,链表中的 su,树中的 ri 和 le 分别是指向别的节点的指针。

lcadna的博客 645

go 修改结构体方法_Golang入门笔记07结构体和方法

Go 语言通过定义结构体来支持用户自定义类型。一个结构体代表现实世界中的一个实体,类似于 Java 中的实体类。当要定义一个类型时,这个类型包含很多属性,例如定义一个用户类型,用户类型中包含用户名、密码和生日等属性,就可以使用结构体。组成结构体属性的数据成为字段,每个字段都有类型和名称;在结构体中,字段名称必须唯一。由于 Go 语言中不存在类的概念,所以结构体struct在 Go 语...

weixin_34792641的博客 719

golang 结构体struct 08

1.简单结构体 /* 普通结构体 */ type Student struct { Name string Age int Score int } /* 双向链表 */ type List struct { Name string Next* List Prev* List } /* 二叉树 */ type Tree struct { Name string left* Tree right* Tree } 2.创建 /* make 用来创建map、slice、channel

灰猫 458

go语言中struct结构体的使用

一、struct的特点 1、用来自定义复杂数据结构 2、struct里面可以包含多个字段(属性) 3、struct类型可以定义方法,注意和函数的区分 4、struct类型是值类型 5、struct类型可以嵌套 6、GO语言没有class类型,只有struct类型 二、struct的定义 1、struct声明: type 标识符 struct { Name string Age ...

weixin_34268843的博客 196

go语言中的结构体

type T struct {a, b int} 也是合法的语法,它更适用于简单的结构体。结构体里的字段都有 名字,像 field1、field2 等,如果字段在代码中从来也不会被用到,那么可以命名它为 _。结构体的字段可以是任何类型,甚至是结构体本身,也可以是函数或者接口。var s Ts.a = 5s.b = 8数组可以看作是一种结构体类型,不过它使用下标而不是具名的字段。Mi1 intimport ("fmt"输出:Mi1 = 10。

个人博客,记录了本人学习的各种有趣的技术。 492

Go 结构体【Go语言圣经笔记】

结构体 结构体是一种聚合的数据类型,它是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。 使用结构体的经典案例是处理公司的员工信息,每个员工信息包含一个唯一的员工编号、员工的名字、家庭住址、出生日期、工作岗位、薪资、上级领导等等。所有的这些信息都需要绑定到一个实体中,可以作为一个整体单元被复制,作为函数的参数或返回值,或者是被存储到数组中,等等。 下面两个语句声明了一个叫Employee的命名结构体类型(结构体定义同C语言),并且声明了一个Employee类型的变量dilbert: type

Steve Wang's blog 441
上一篇: go语言struct中的tag
下一篇: 进程基础知识
hellohellowode
博客等级 码龄11年 2粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值