Go List

作者: JunChow520 | 来源:发表于2021-01-04 02:07 被阅读0次
  • 列表(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) *Element mark插入点之后插入元素,插入点由插入函数提供。
InsertBefore(v interface {}, mark * Element) *Element mark插入点之前插入元素,插入点由插入函数提供。
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属性。

相关文章

  • GO 命令

    go run go build go install go list

  • To Go List

    台湾 北海道 希腊 西藏 云南

  • To Go List

    千岛湖 临安 无锡

  • Go List

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

  • Go List

    链表 列表是一种非连续的存储容器,由多个节点组成。 节点通过一些变量记录彼此之间的关系 列表存在多种实现方法,比如...

  • go build 注意事项和坑 2020-07-15

    If the arguments to build are a list of .go files from a ...

  • Git basic

    clone the project go into/return back the project list th...

  • 40. Carol's shopping list.

    1. 单词部分 shopping n. 购物go shopping 去购物 list 单子name list b...

  • D35

    "Letting go of comparison is not a to-do list item. For m...

  • Respective package management sy

    PS! I just list some part of info here, go to the respect...

网友评论

      本文标题:Go List

      本文链接:https://www.haomeiwen.com/subject/hfrmoktx.html