写点什么

【愚公系列】2022 年 10 月 Go 教学课程 023-Go 容器之列表

作者:愚公搬代码
  • 2022 年 10 月 09 日
    福建
  • 本文字数:1493 字

    阅读完需:约 5 分钟

一、Go 容器之列表

1.列表的定义

列表是一种数据结构,由多元素成的有限序列,即按照一定的线性顺序排列而成的数据项的集合,在这种数据结构上可以进行元素的的插入,删除,修改,和查找。


列表的两种主要表现是数组和链表,栈和队列是两种特殊类型的列表。列表(list)底层常见的数据结构有: 单链表、双链表等。

2.Go 中的列表

在 Go 语言中,列表的实现都在 container/list 包中,内部实现原理是双链表。


列表(list)能够方便高效地进行元素的删除、插入操作。

3.列表的声明

变量名 := list.New()//或var 变量名 = list.List
复制代码

4.列表的操作

4.1 列表添加元素

列表添加元素如下所示:



相关案例:


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)}
复制代码



发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2022.03.01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年10月 Go教学课程 023-Go容器之列表_10月月更_愚公搬代码_InfoQ写作社区