当前位置:网站首页>【愚公系列】2022年07月 Go教学课程 023-Go容器之列表
【愚公系列】2022年07月 Go教学课程 023-Go容器之列表
2022-08-01 03:37:00 【愚公搬代码】
文章目录
一、Go容器之列表
1.列表的定义
列表是一种数据结构,由多元素成的有限序列,即按照一定的线性顺序排列而成的数据项的集合,在这种数据结构上可以进行元素的的插入,删除,修改,和查找。
列表的两种主要表现是数组和链表,栈和队列是两种特殊类型的列表。列表(list)底层常见的数据结构有: 单链表、双链表等。
2.Go中的列表
在 Go 语言中,列表的实现都在 container/list 包中,内部实现原理是双链表。
列表(list)能够方便高效地进行元素的删除、插入操作。
3.列表的声明
变量名 := list.New()
//或
var 变量名 = list.List
4.列表的操作
4.1 列表添加元素
列表添加元素如下所示:
| 方法 | 功能 |
|---|---|
| InsertAfter(v interface{}, mark *Element) *Element | 在 mark 点后面插入元素 |
| InsertBefore(v interface{}, mark *Element) *Element | 在 mark 点前面插入元素 |
| PushFrontList(other *List) | 添加 other 列表中的元素到头部 |
| PushBackList(other *List) | 添加 other 列表中的元素到尾部 |
相关案例:
package main
import (
"container/list"
"fmt"
)
func main() {
l := list.New()
l.PushFront("头部愚公")
l.PushBack("尾部愚公")
// 遍历
for i := l.Front(); i != nil; i = i.Next() {
fmt.Println(i.Value)
}
}

其中 i := l.Front() 表示初始赋值,用来获取列表的头部下标;
然后每次会循环会判断 i != nil,若等于空,则会退出循环,否则执行 i.Next()继续循环下一个元素;
4.1 列表删除元素
package main
import (
"container/list"
"fmt"
)
func main() {
l := list.New()
// 头部添加字符串
l.PushFront("愚公1号")
// 尾部添加字符串
l.PushBack("愚公2号")
// 尾部添加一个整型,并保持元素句柄
element := l.PushBack(1)
// 在 1 之后添加字符串 2
l.InsertAfter("2", element)
// 在 1 之前添加字符串 0
l.InsertBefore("0", element)
for i := l.Front(); i != nil; i = i.Next() {
fmt.Println(i.Value)
}
// 删除 element 对应的元素
l.Remove(element)
// 遍历
for i := l.Front(); i != nil; i = i.Next() {
fmt.Println(i.Value)
}
}

4.3 列表获取元素
4.3.1 获取列表头结点
package main
import (
"container/list"
"fmt"
)
func main() {
l := list.New()
// 头部添加字符串
l.PushFront("愚公1号")
// 尾部添加字符串
l.PushBack("愚公2号")
// 尾部添加一个整型,并保持元素句柄
element := l.PushBack(1)
// 在 1 之后添加字符串 2
l.InsertAfter("2", element)
fmt.Println("Front =", l.Front().Value)
}

4.3.2 获取列表尾结点
package main
import (
"container/list"
"fmt"
)
func main() {
l := list.New()
// 头部添加字符串
l.PushFront("愚公1号")
// 尾部添加字符串
l.PushBack("愚公2号")
// 尾部添加一个整型,并保持元素句柄
element := l.PushBack(1)
// 在 1 之后添加字符串 2
l.InsertAfter("2", element)
fmt.Println("Front =", l.Back().Value)
}

4.3.3 获取上一个结点
package main
import (
"container/list"
"fmt"
)
func main() {
//使用列表内置的 Prev() 函数,获取列表的上一个结点
listHaiCoder := list.New()
listHaiCoder.PushFront("1")
element := listHaiCoder.PushFront("2") //定义节点位置
listHaiCoder.PushFront("3")
preElement := element.Prev()
fmt.Println("preElement =", preElement.Value)
}

4.3.4 获取下一个结点
package main
import (
"container/list"
"fmt"
)
func main() {
//使用列表内置的 Prev() 函数,获取列表的上一个结点
listHaiCoder := list.New()
listHaiCoder.PushFront("1")
element := listHaiCoder.PushFront("2") //定义节点位置
listHaiCoder.PushFront("3")
preElement := element.Next()
fmt.Println("preElement =", preElement.Value)
}

边栏推荐
- Article summary: the basic model of VPN and business types
- 普通用户无法访问hgfs目录
- The fledgling Xiao Li's 113th blog project notes: Wisdom cloud smart flower watering device combat (2) - basic Demo implementation
- 测试
- HIRO: Hierarchical Reinforcement Learning 】 【 Data - Efficient Hierarchical Reinforcement Learning
- Talking about hardware device computing storage and data interaction
- 黑客到底可以厉害到什么程度?
- MLP neural network, GRNN neural network, SVM neural network and deep learning neural network compare and identify human health and non-health data
- 预言机简介
- EntityFramework saves to SQLServer decimal precision is lost
猜你喜欢

Passive anti-islanding-UVP/OVP and UFP/OFP passive anti-islanding model simulation based on simulink

初出茅庐的小李第114篇博客项目笔记之机智云智能浇花器实战(3)-基础Demo实现

Interview Blitz 69: Is TCP Reliable?Why?

【kali-信息收集】枚举——DNS枚举:DNSenum、fierce

Software Testing Interview (3)

让你的 Lottie 支持文字区域内自动换行

Browser download shortcut to desktop (PWA)

对无限debugger的一种处理方式

Hackers can how bad to what degree?

普通用户无法访问hgfs目录
随机推荐
What is dynamic programming and what is the knapsack problem
Difference Between Compiled and Interpreted Languages
【消息通知】用公众号模板消息怎么样?
Character encoding and floating point calculation precision loss problem
One service layer needs to call the other two service layers to obtain data and assemble it into the final data. The data is all lists. How to design the cache?
黑客到底可以厉害到什么程度?
Unknown Bounded Array
Raspberry pie arm version of GCC installed configuration and environment variables
Dart named parameter syntax
被 CSDN,伤透了心
【分层强化学习】HIRO:Data-Efficient Hierarchical Reinforcement Learning
Message queue design based on mysql
Nmap 操作手册 - 完整版
Nmap manuals - the full version
2022-07-31: Given a graph with n points and m directed edges, you can use magic to turn directed edges into undirected edges, such as directed edges from A to B, with a weight of 7.After casting the m
Message queue MySQL table for storing message data
[Getting Started Tutorial] Rollup Module Packager Integration
TypeScript简化运行之ts-node
Device tree - conversion from dtb format to struct device node structure
Article summary: the basic model of VPN and business types