package main
import (
"container/list"
"fmt"
)
//列表是一种非连续的存储容器,由多个节点组成,节点通过一些变量记录彼此之间的关系,列表有多种实现方法,如单链表、双链表等。
//列表使用 container/list 包来实现,内部的实现原理是双链表,列表能够高效地进行任意位置的元素插入和删除操作。
//初始化列表
//list的初始化:New()和var关键字声明都可以,两种初始化效果一致
//列表与切片和 map 不同的是,列表并没有具体元素类型的限制,
// 因此,列表的元素可以是任意类型,这既带来了便利,也引来一些问题,
// 例如给列表中放入了一个 interface{} 类型的值,取出值后,如果要将 interface{} 转换为其他类型将会发生宕机
/*
列表插入元素的方法:
方 法 功 能
InsertAfter(v interface {}, mark * Element) * Element 在 mark 点之后插入元素,mark 点由其他插入函数提供
InsertBefore(v interface {}, mark * Element) *Element 在 mark 点之前插入元素,mark 点由其他插入函数提供
PushBackList(other *List) 添加 other 列表元素到尾部
PushFrontList(other *List) 添加 other 列表元素到头部
*/
func main() {
ListAdd()
ListDelete()
ListFor()
}
func ListAdd() {
//1。通过container/list包的new()函数初始化list
list1:=list.New()
//2。通过var关键字初始化list
//var list2 list.List
//将first字符串插入到列表尾部,此时列表是空的,插入后只有一个元素
list1.PushBack("first")
//将10放入列表,此时,列表中已经存在first元素,10这个元素将放在first的前面
list1.PushFront(10)
//列表插入函数的返回值会提供一个 *list.Element 结构
fmt.Println(list1) //&{{0xc0000721e0 0xc0000721b0 <nil> <nil>} 2}
}
//从列表中删除元素:
//列表插入函数的返回值会提供一个 *list.Element 结构,这个结构记录着列表元素的值以及与其他节点之间的关系等信息,
// 从列表中删除元素时,需要用到这个结构进行快速删除。
func ListDelete() {
//创建列表实例
l:=list.New()
//尾部添加
l.PushBack("back")
//头部添加
l.PushFront(20)
//将fist插入到列表尾部,并将这个元素的内部结构保存到element变量中
element:=l.PushBack("fist")
//在element的之面插入high字符串
l.InsertAfter("high",element)
//在element位置之前添加noon
l.InsertBefore("noon",element)
fmt.Println(l) //&{{0xc0000662a0 0xc000066300 <nil> <nil>} 5}
//移除element变量对应的元素
l.Remove(element)
fmt.Println(l) //&{{0xc0000722a0 0xc000072300 <nil> <nil>} 4}
}
//遍历列表
//遍历双链表需要配合 Front() 函数获取头元素,遍历时只要元素不为空就可以继续进行,每一次遍历都会调用元素的 Next() 函数
func ListFor() {
//创建列表实例
l:=list.New()
//尾部添加
l.PushBack("back")
//头部添加
l.PushFront(20)
//将fist插入到列表尾部,并将这个元素的内部结构保存到element变量中
element:=l.PushBack("fist")
//在element的之面插入high字符串
l.InsertAfter("high",element)
//在element位置之前添加noon
l.InsertBefore("noon",element)
//i:=l.Front()初始赋值:获取头元素,直到i=nil(空值或零值)时结束循环,否则继续打印下一个元素
for i:=l.Front();i!=nil ;i=i.Next() {
fmt.Println(i.Value)
/*
20
back
noon
fist
high
*/
}
}
Go中list用法
最新推荐文章于 2023-11-22 23:30:41 发布