Go List

  • 列表(list)是一种非连续的存储容器,列表由多个节点构成,节点之间通过变量记录彼此之间的关系。
  • 列表有多种实现方式,常见的比如单链表、双链表...

Go语言中列表使用container/list包来实现,实现原理是双链表,列表可以实现高效地且在任意位置插入和删除元素操作。

list列表与slice切片和map映射不同之处在于,list列表没有具体元素类型的限制。因此,list列表中的元素可以是任意类型的。

list列表初始化的方式有两种,分别是使用var关键字和New()函数来声明,两种声明方式的效果是一致的。

声明

使用var关键字声明列表

var varname list.List

初始化

list列表可通过container/list包中提供的New()函数来初始化

varname := list.New()

插入元素

list双链表支持从队列前方或后方插入元素,前方插入使用PushFront()方法,后方插入使用PushBack()方法,两个方法均返回一个*list.Element的结构。

doubleLinkedList := list.New()
doubleLinkedList.PushFront(1)
doubleLinkedList.PushBack("junchow")
for i:=doubleLinkedList.Front(); i!=nil; i=i.Next(){
    fmt.Printf("item = %v\n", i.Value)
}
插入元素描述
InsertAfter(v interface {}, mark * Element) *Elementmark插入点之后插入元素,插入点由插入函数提供。
InsertBefore(v interface {}, mark * Element) *Elementmark插入点之前插入元素,插入点由插入函数提供。
PushBackList(other *List)添加列表元素到尾部
PushBeforeList(other *List)添加列表元素到头部
link := list.New()
link.PushFront(1)
link.PushBack("jc")

ele := link.PushBack("male")
link.InsertAfter("dev", ele)
link.InsertBefore("it", ele)

for i:=link.Front(); i!=nil; i=i.Next(){
    fmt.Printf("item = %v\n", i.Value)
}

删除元素

list列表插入后会返回一个*list.Element结构,此结构记录着列表元素的值和与其它节点之间的关系信息。当需要删除元素时,需使用此结构来进行实现。

若需要删除插入的元素则只能通过*list.Element配置Remove()方法来删除,这种删除的方式更高效,因为这是双链表特性之一。

link := list.New()
link.PushFront(1)
link.PushBack("jc")

ele := link.PushBack("male")
link.InsertAfter("dev", ele)
link.InsertBefore("it", ele)

link.Remove(ele)

for i:=link.Front(); i!=nil; i=i.Next(){
    fmt.Printf("item = %v\n", i.Value)
}

遍历列表

使用for循环遍历双链表需配合Front()函数获取头元素,遍历时只要元素不为空nil即可继续,每次遍历都需调用元素的Next()方法,若需获取元素的值则需访问元素的Value属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值