03【保姆级】-GO语言变量和数据类型和相互转换

news2024/10/6 20:37:48

03【保姆级】-GO语言变量和数据类型

  • 一、变量
    • 1.1 变量的定义:
    • 1.2 变量的声明、初始化、赋值
    • 1.3 变量使用的注意事项
  • 插播-关于fmt.Printf格式打印%的作用
  • 二、 变量的数据类型
    • 2.1整数的基本类型
      • 2.1.1 有符号类型 int8/16/32/64
      • 2.1.2 无符号类型 int8/16/32/64
      • 2.1.3 整型类型 int、uint、rune、byte
      • 2.1.4 整型的使用细节
    • 2.2 浮点类型
      • 2.2.1 小数类型分类
    • 2.3 字符类型
      • 2.3.1 基本介绍
      • 2.3.2 字符使用细节
    • 2.4 布尔类型
      • 2.4.1 基本概述
    • 2.5 String类型
      • 2.5.1 基本概述
      • 2.5.2 String使用注意事项和细节
    • 2.6 基本数据类型的默认值
    • 2.7 基本数据类型的相互转换
    • 2.8 转换的细节(重要)
    • 2.9 基本数据类型转String(重要)
      • 2.9.1 fmt.Sprintf("%参数", 变量名)
      • 2.9.2 使用strconv包的函数
    • 2.10 String类型转为基本类型
      • 2.10.1 使用strconv包的函数

之前我学过C、Java、Python语言时总结的经验:

  1. 先建立整体框架,然后再去抠细节。
  2. 先Know how,然后know why。
  3. 先做出来,然后再去一点点研究,才会事半功倍。
  4. 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。
  5. 对于GO语言,切记遵守语法格式规则。(例如python语言、例如SpringBoot框架等)
    解释:某些知识点,就是很难了解,那么先做出来,然后继续向前学习,可能在某个时间点我们就会恍然大悟。

一、变量

1.1 变量的定义:

  • 任何高级程序语言写程序,变量都是程序的基本组成单位。
  • 变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,同样的道理,通过变量名可以访问到变量()

1.2 变量的声明、初始化、赋值

  1. 声明变量(定义变量)

基本语法: var 变量名 数据类型
var a int

  1. 变量赋值

在声明变量的时候,就给值
var a int = 1
var b = 300

  1. 使用变量

var a int
a = 100

例如下面的a/b/c都是变量


package main

import "fmt"

func main() {
	var a int  //声明变量
	a = 10     //变量赋值
	b := 20    //变量赋值
	c := a + b //使用变量
	fmt.Println(a) // 10
	fmt.Println(b) // 20
	fmt.Println(c) // 30
}

1.3 变量使用的注意事项

  1. 变量表示内存中的一个存储区域
  2. 该区域有自己的名称(变量名)和类型(数据类型)

所有代码会用磁盘中读取到内存中,进行运行。
那么变量,例如a = 10 。那么就会存储到内存中。

  1. Golang变量使用的三种方式

    1. 第一种:指定变量类型,声明后若不赋值,使用默认值。

    int类型默认为0
    String类型默认为空

    1. 第二种:根据值自行判定变量类型(类型推导)

    如果不指定类型,那么就会go语言类型推导。
    var a = “abc” 在打印的时候就会输出string类型

    1. 第三种省略var,注意:=左侧的变量不应该是已经声明过的,否则会导致编译错误

    两种方式:(方式一的两句话,等价于方式二)
    > var name1 string
    name1 = “zhangsan1” //方式一
    name2 := “zhangsan2” //方式二

  2. 多变量声明
    在编程中,有时我们需要一次性声明多个变量,Golang也提供这样的语法

形式一:
var a, a1, a2, a3 int
a = 10
a1 = 20
a2 = 30
a3 = 40


形式二:
var a1, a2, a3, name = 1, 2, 3, "zhangsan"
	fmt.Println(a1,a12,a23,a4)

形式三:
a, b, c, d, name := 1, 2, 3, 4, "zhangsan"
fmt.Println(a,b,c,d,name)

关于全局变量:

var (
	a    = 1
	b    = 2
	c    = 3
	d    = 4
	name = "zhangsan"
)
func main() {
	fmt.Println(a, b, c, d, name)
}
  1. 该区域的数据值可以在同一类型范围内不断变化
  2. 变量在同一个作用域内不能重名
  3. 变量=变量名+值+数据类型,这一点请大家注意。
  4. Golang的变量如果没有赋初值,编译器会使用默认值,比如int默认值0 string默认值为空用

插播-关于fmt.Printf格式打印%的作用

参考的官网地址是:https://studygolang.com/pkgdoc

通用:
%v	值的默认格式表示
%+v	类似%v,但输出结构体时会添加字段名
%#v	值的Go语法表示
%T	值的类型的Go语法表示
%%	百分号

布尔值:
%t	单词truefalse

整数:

%b	表示为二进制
%c	该值对应的unicode码值
%d	表示为十进制
%o	表示为八进制
%q	该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x	表示为十六进制,使用a-f
%X	表示为十六进制,使用A-F
%U	表示为Unicode格式:U+1234,等价于"U+%04X"

浮点数与复数的两个组分:

%b	无小数部分、二进制指数的科学计数法,如-123456p-78;参见strconv.FormatFloat
%e	科学计数法,如-1234.456e+78
%E	科学计数法,如-1234.456E+78
%f	有小数部分但无指数部分,如123.456
%F	等价于%f
%g	根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
%G	根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)

字符串和[]byte%s	直接输出字符串或者[]byte
%q	该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
%x	每个字节用两字符十六进制数表示(使用a-f)
%X	每个字节用两字符十六进制数表示(使用A-F)    

指针:

%p	表示为十六进制,并加上前导的0x    

二、 变量的数据类型

在这里插入图片描述

2.1整数的基本类型

简单的说,就是用于存放整数值的,比如 0,-1,2345 等等。

2.1.1 有符号类型 int8/16/32/64

在这里插入图片描述

** int8 范围是:-128 ~ 127**
在这里插入图片描述

2.1.2 无符号类型 int8/16/32/64

int 无符号类型:
在这里插入图片描述

2.1.3 整型类型 int、uint、rune、byte

在这里插入图片描述

2.1.4 整型的使用细节

  1. Golang 各整数类型分: 有符号和无符号,int uint 的大小和系统有关
  2. Golang 的整型默认声明为 int 型
  3. 如何在程序查看某个变量的字节大小和数据类型
import (
	"fmt"
	unsafe "unsafe"
)

	var n1 = 100
	fmt.Printf("n1 的类型是 %T ", n1) //n1 的类型是 int

	var n2 int64 = 1
	fmt.Printf("n1 的数据类型是 %T, n2 占用的字节数是%d", n2, unsafe.Sizeof(n2))
	//   n1 的数据类型是 int64, n2 占用的字节数是8
  1. olang 程序中整型变量在使用时,遵守保小不保大的原则,即:在保证程序正确运行下,尽量使用占用空间小的数据类型。[如: 年龄]
  2. bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。[二进制再详细说] 1byte = 8 bit

2.2 浮点类型

Golang的浮点类型可以表示一个小数,比如1.2 / 3333.11 / 3232.324等等

2.2.1 小数类型分类

在这里插入图片描述

  1. 关于浮点数在机器中存放形式的简单说明.浮点数=符号位+指数位+尾数位说明: 浮点数都是有符号的.
  2. 如果使用float32 可能造成精度损失。

开发过程中,推荐使用float64。 并且默认也是float64 .
Golang浮点类型有固定的范围和字段类型,不受具体操作系统的影响。
在这里插入图片描述

  1. 浮点型的存储分为三个部分:符号位+指数位+尾数位。 在存储过程中,精度会有丢失

2.3 字符类型

2.3.1 基本介绍

Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 来保存。
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。也就是说对于传统的字符串是由字符组成的,而 Go 的字符串不同,它是由字节组成的。

  1. 如果我们保存的字符在 ASCII 表的,比如[0-1,a-z,A-Z.]直接可以保存到 byte2)
  2. 如果我们保存的字符对应码值大于 255,这时我们可以考虑使用 int 类型保存3)
  3. 如果我们需要安装字符的方式输出,这时我们需要格式化输出,即 fmt.Printfr“%c”,cl)…
var n2 int = '你'
	fmt.Printf("n2 的数据类型是 %T, n2 占用的字节数是%d.  \n", n2, unsafe.Sizeof(n2))
	// n2 的数据类型是 int, n2 占用的字节数是8. 

	var c3 int = '你'
	fmt.Printf("c3 = %c \n", c3)	//c3 = 你	
	fmt.Printf("%c", c3) 			//你

2.3.2 字符使用细节

在这里插入图片描述

  1. 字符型 存储到 计算机中,需要将字符对应的码值 (整数) 找出来存储:字符—>对应码值---->二进制–>存储
    读取:二进制----> 码值 ----> 字符 -> 读取
  2. 字符和码值的对应关系是通过字符编码表决定的(是规定好)
  3. Go 语言的编码都统一成了 utf-8。非常的方便,很统一,再也没有编码乱码的困扰了

2.4 布尔类型

2.4.1 基本概述

  1. 布尔类型也叫 bool类型,bool 类型数据只允许取值 true 和 false
  2. bool类型占1 个字节。
  3. bool 类型适于逻辑运算,一般用于程序流程控制
	seg := true
	fmt.Printf("%T  \n", seg) //bool
	fmt.Println("seg=", seg)    //seg= true

if seg {
		fmt.Println("如果是true, 我就打印")
	} else {
		fmt.Println("如果是false, 我就打印")
	}

2.5 String类型

2.5.1 基本概述

字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。

var name string = "今年张三,英文ZhangSan,23岁了。"
	fmt.Println(name)

2.5.2 String使用注意事项和细节

  1. Go语言的字符串的字节使用UTF-8编码标识Unicode文本,这样Golang统一使用Utf-8编码,中文乱码就不会出现了。
  2. 字符串一旦赋值后,字符串就不能单个字符修改了。在Go中字符串是不可变的。
var str = "hello"
str[0] = 'b'  //这里就会报错了。字符串单个字符是不可变的。

可以直接从新赋值:
str ="word"

在这里插入图片描述
3. 字符串的两种表示方式
1. 双引号,会识别转义字符
2. 反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果。
在这里插入图片描述
4. 字符串拼接方式

	str := "hello "
	name := "zhangsan"
	strName := str + name
	fmt.Println(strName)  //hello zhangsan
  1. 当一行字符串太长时,需要使用多行字符串,可以用“” + 进行绑定。 重点是:+ 号必须保持在上一行中。
str := "lisi " + "wangwu " + " zhaoliu " + " a" +
	" b" + "c " +
	"D"

fmt.Println(str)  //lisi wangwu  zhaoliu  a bc D

2.6 基本数据类型的默认值

在Go中,数据类型都有一个默认值,当没有赋值时,就会保留默认值,在Go中,默认值又叫“零值”
在这里插入图片描述

2.7 基本数据类型的相互转换

Golang和java、C不同,在Go语言中,不同类型的变量之间赋值时需要显式转换。 也就是说Golang中数据类型不能自动转换

基本语法:

  • 表达式T(v) 将值 v 转换为类型T
    • T:就是数据类型,比如:int32 , int64 ,float32, float64等
    • V:就是需要转换的变量
var n1 int = 100
var n2 float64 = float64(n1)
n2 += 0.905
var n3 int = int(n2)
fmt.Printf("n1=%v, n2=%v, n3=%v", n1, n2, n3)
// n1=100, n2=100.905, n3=100

2.8 转换的细节(重要)

  1. 在Go中,数据类型的转换可以是从 小范围 转换到 大范围。也可以从 大范围 转换成 小范围。
  2. 被转换的是变量存储的数据(既值) ,变量本身的数据类型并没有变化。

例如:
我们将 n1 float =1.23 转换成 n2 int = 100
那么分别打印 n1 =1.23. 打印n2 =100
var n1 float64 = 1.23
var n2 int = int(n1)
fmt.Printf(“n1=%v, n2=%v”, n1, n2)
// 打印结果:n1=1.23, n2=1

  1. 在转换结果中,比如将Int64转换成int8 ,编译时不会报错 ,只是转换的结果是按溢出处理,和我们希望的结果不一样。
var n1 int64 = 999999
var n2 int8 = int8(n1)
fmt.Printf("n1=%v, n2=%v", n1, n2)
//  n1=999999, n2=63

2.9 基本数据类型转String(重要)

在程序开发中,我们经常需要将基本数据类型转成String类型。
或者String类型转换成基本数据类型。

2.9.1 fmt.Sprintf(“%参数”, 变量名)

方式一: fmt.Sprintf(“%参数", 表达式)

  1. 参数需要和表达式的数据类型相匹配
  2. fmt.Sprintf() 会返回转换后的字符串
package main

import "fmt"

func main() {
	var n1 int = 123
	var n2 float64 = 1.23
	var n3 byte = 'a'
	var n4 bool = true
	var str string

	// %T 的意思是:该变量的类型
	// %q 的意思是:打印变量的类型,并且用双引号,引起来。
	str = fmt.Sprintf("%d", n1)
	fmt.Printf("str的类型是:%T, Str等于%q\n", str, str)

	str = fmt.Sprintf("%f", n2)
	fmt.Printf("str的类型是%T,str等于:%q \n", str, str)

	str = fmt.Sprintf("%c", n3)
	fmt.Printf("str的类型是:%T,str等于%q \n", str, str)
	str = fmt.Sprintf("%t", n4)
	fmt.Printf("str的类型是%T,str等于%q \n", str, str)
}
str的类型是string, Str等于"123"
str的类型是string, str等于:"1.230000" 
str的类型是:string str等于"a" 
str的类型是string, str等于"true" 

2.9.2 使用strconv包的函数

方式二:使用strconv包的函数
3. func FomatBool(b lool) String
4. func FomatInt(i int64, base int ) String

	var num1 int = 123
	var num2 float64 = 1.234
	var num3 bool = true
	var str string

	fmt.Printf("num1的类型是:%T \n", num1)
	str = strconv.FormatInt(int64(num1), 10)
	fmt.Printf("str的类型是:%T,str的值是:%q \n", str, str)

	//要转换的变量,
	//'f':格式是:ddd.dddd。 一般使用的比较多
	//精度(小数点后面几位),该float的位数,例如64/32
	str = strconv.FormatFloat(num2, 'f', 2, 64)
	fmt.Printf("str的类型是:%T,str的值是%q \n", str, str)

	str = strconv.FormatBool(num3)
	fmt.Sprintf("str的类型是:%T,str的值是%q", str, str)

num1的类型是:int 
str的类型是:string,str的值是:"123" 
str的类型是:string,str的值是"1.23" 

 
Itoa 将int类型转为String类型:
var num1 int = 100
	var str string = strconv.Itoa(num1)
	fmt.Printf(str)

关于strconv.FormatFloat的参数说明:
在这里插入图片描述

2.10 String类型转为基本类型

2.10.1 使用strconv包的函数

func ParseBool
func ParseBool(str string) (value bool, err error)
返回字符串表示的bool值。它接受1、0、t、f、T、F、true、false、True、False、TRUE、FALSE;否则返回错误。

	var str string = "true"
	var err error
	var b bool
	b, err = strconv.ParseBool(str)
	fmt.Printf("b的类型是 %T,b的值是%v,b的错误结果是:%v \n", b, b, err)

func ParseInt
func ParseInt(s string, base int, bitSize int) (i int64, err error)
返回字符串表示的整数值,接受正负号。

base指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制;
bitSize指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64;返回的err是*NumErr类型的,如果语法有误,err.Error = ErrSyntax;如果结果超出类型范围err.Error = ErrRange。

	var str string = "123"
	var i int64
	// 要转的字符串,base:转成10进制,bitSize:转成64位
	i, _ = strconv.ParseInt(str, 10, 0)
	fmt.Printf("i的格式是:%T,  i的值是:%v", i, i)
	// i的格式是:int64,  i的值是:123
  • func ParseFloat
    func ParseFloat(s string, bitSize int) (f float64, err error)

解析一个表示浮点数的字符串并返回其值。
如果s合乎语法规则,函数会返回最为接近s表示值的一个浮点数(使用IEEE754规范舍入)。bitSize指定了期望的接收类型,32是float32(返回值可以不改变精确值的赋值给float32),64是float64;返回值err是*NumErr类型的,语法有误的,err.Error=ErrSyntax;结果超出表示范围的,返回值f为±Inf,err.Error= ErrRange。

	var str string = "1.2345"
	var f float64
	f, _ = strconv.ParseFloat(str, 64)
	fmt.Printf("f的类型是%T, f的值是:%v", f, f)
	// f的类型是float64, f的值是:1.2345

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1178520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

涉及法律诉讼和负债670万美元的【工务园】申请纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于东莞的人力资源SaaS平台Baiya International Group Inc(简称:工务园)近期已向美国证券交易委员会(SEC)提交招股书,申…

【pytorch源码分析--torch执行流程与编译原理】

背景 解读torch源码方便算子开发方便后续做torch 模型性能开发 基本介绍 代码库 https://github.com/pytorch/pytorch 模块介绍 aten: A Tensor Library的缩写。与Tensor相关的内容都放在这个目录下。如Tensor的定义、存储、Tensor间的操作(即算子/OP&#xff…

StripedFly恶意软件:悄无声息运行5年,感染百万设备

导语:最近,俄罗斯网络安全公司Kaspersky发布的一项调查显示,一种名为StripedFly的高级恶意软件伪装成加密货币挖矿程序,悄无声息地在全球范围内运行了超过5年,感染了100万台设备。这是一种复杂的模块化框架&#xff0c…

【Unity实战】最全面的库存系统(二)(附源码)

文章目录 先来看看最终效果前言箱子库存箱子存储物品玩家背包快捷栏满了,物品自动加入背包修复开着背包拾取物品不会刷新显示的问题将箱子库存和背包分开,可以同时打开源码完结先来看看最终效果 前言 本期紧跟着上期,继续来完善我们的库存系统,实现箱子库存和人物背包 箱…

RocketMq简介及安装、docker安装rocketmq、安装rocketmq可视化管理端

前言 本文主要简单介绍rocketmq及使用docker安装rocketmq的方法。 rocketmq简介 rocketmq有两部分,nameserver和broker,nameserver用来维护broker的地址、向生产者、消费者推送broker的最新地址;broker用来存储、转发消息;也就…

Java根据一个List内Object的两个字段去重

背景 在Java开发过程中,我们经常会遇到需要对List进行去重的需求。 其中常见的情况是,将数组去重,或者将对象依据某个字段去重。这两种方式均可用set属性进行处理。 今天讨论,有一个List,且其中的元素是自定义的对象&…

Linux学习第34天:Linux LCD 驱动实验(一):星星之火可以燎原

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 LCD显示屏是由一个一个的像素点构成的。当你能控制一个像素点的亮暗及颜色变化的时候,你就能让LCD显示瓶显示五颜六色的整幅图案。甚至可以让LCD屏幕…

uboot启动linux kernel的流程

目录 前言流程图autoboot_commandrun_command_listdo_bootmdo_bootm_statesdo_bootm_linuxboot_prep_linuxboot_jump_linux 前言 本文在u-boot启动流程分析这篇文章的基础上,简要梳理uboot启动linux kernel的流程。 流程图 其中, autoboot_command位于…

合成数据的被需要的5 个重要原因

若要训练机器学习模型,需要数据。数据科学任务通常不是 Kaggle 竞赛,在竞赛中,你有一个很好的大型策划数据集,并预先标记。有时,您必须收集、组织和清理自己的数据。在现实世界中收集和标记数据的过程可能非常耗时、繁…

手拿5份offer,最高18k! 95后艺术生转行后台网优,这个火花有点大!

当艺术生碰上理工科,会有怎样的火花?在大众的刻板认知里,艺术和理工科就像两条很少重合的平行线,双方从业者在自己的行业下按部就班,规划未来。 来自东北长春的W同学却打破了常人的认知,身为美术老师的他却…

沿面闪络放电测量装置中的真空度精密控制解决方案

摘要:针对现有低气压环境下沿面闪络测试中存在真空度无法精确控制所带来的一系列问题,特别是针对用户提出的对现有沿面闪络试验装置的真空控制系统进行技术改造要求,本文提出了相应的技改方案,技改方案采用基于动态平衡法的电动针…

民生银行与CRM系统的无代码开发集成,助力用户运营

连接民生银行与CRM系统的无代码开发集成 中国民生银行股份有限公司,成立于1996年,是一家全国性股份制商业银行。民生银行拥有强大的技术实力和丰富的业务经验,通过与各类企业进行深度合作,帮助企业实现财务管理和客服系统的优化运…

BUUCTF easycap 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,解压得到一个.pcap文件。 密文: 解题思路: 1、这道题和它的名字一样,真的很easy。双击easycap.pcap文件,打开Wireshark。在Wireshark中&#xf…

【软件工程】程序流程图之绘图工具和教程推荐

2023年11月6日,周一晚上 目录 绘图工具推荐教程推荐 绘图工具推荐 我推荐使用开源免费的draw.io要绘制程序流程图 draw.io网页版地址:Flowchart Maker & Online Diagram Software draw.io桌面版下载地址:GitHub - jgraph/drawio-desk…

MySQL的备份恢复

数据备份的重要性 1.生产环境中,数据的安全至关重要 任何数据的丢失都会导致非常严重的后果。 2.数据为什么会丢失 :程序操作,运算错误,磁盘故障,不可预期的事件(地震,海啸)&#x…

使用cpolar配合Plex搭建私人媒体站并实现远程访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…

Nginx默认会自动忽略请求头Headers里带下划线_的参数

起因:该接口设置了必须要传送app_code和app_secret才能正常访问。实际我在本地环境测试中,发现该接口是正常访问的,但是部署到正式系统之后发现,该接口一直提示app_code和app_secret不能为空。 后续排查:发现正式系统…

德博能源、西门子能源、霍尼韦尔等出席2023中国可持续生物燃料峰会

会议背景 可持续燃料是由可再生和/或替代原料生产的,如植物、蔬菜或工业废料的燃料总称。与传统化石燃料相比,可持续燃料可以帮助减少温室气体和碳排放,这有助于保护自然环境。采用可持续燃料可以为航空、重型公路货运和海运等脱碳更复杂的部…

广联达OA存在信息泄露漏洞复现

文章目录 广联达OA存在信息泄露漏洞复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.复现 0x06 修复建议 广联达OA存在信息泄露漏洞复现 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用…

二叉平衡搜索树-AVL树

目录 1. avl树的概念2. 树结点的定义3. 结点的插入3.1 左单旋3.2 右单旋3.3 右左双旋3.4 左右双旋 4. 结点的删除(了解)5. 整体代码 1. avl树的概念 前面学习过二叉搜索树,理想状态下虽可以缩短查找的效率,但如果数据有序或接近有序依次插入后二叉搜索树…