Go语言list(列表)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言list(列表)相关的知识,希望对你有一定的参考价值。

参考技术A 2021-11-10

列表是一种非连续的存储容器,有多个节点组成,节点通过一些变量记录彼此之间的关系

单链表和双链表就是列表的两种方法。

原理:A、B、C三个人,B懂A的电话,C懂B的电话只是单方知道号码,这样就形成了一个单链表结构。

如果C把自己的号码给B,B把自己的号码给A,因为是双方都知道对方的号码,这样就形成了一个双链表结构

如果B换号码了,他需要通知AC,把自己的号码删了,这个过程就是列表的删除操作。

在Go语言中,列表使用 container/list 包来实现,内部的实现原理是双链表,列表能够高效地进行任意位置的元素插入和删除操作。

列表初始化的两种办法

列表没有给出具体的元素类型的限制,所以列表的元素可以是任意类型的,

例如给列表中放入了一个 interface 类型的值,取出值后,如果要将 interface 转换为其他类型将会发生宕机。

双链表支持从队列前方或后方插入元素,分别对应的方法是 PushFront 和 PushBack。

列表插入函数的返回值会提供一个 *list.Element 结构,这个结构记录着列表元素的值以及与其他节点之间的关系等信息,从列表中删除元素时,需要用到这个结构进行快速删除。

遍历完也能看到最后的结果

学习地址: http://c.biancheng.net/view/35.html

Go语言列表list获取元素

        Golang的列表元素的获取可以使用内置的 Front 函数获取头结点,使用 Back 函数获取尾结点,使用 Prev 获取前一个结点,使用 Next 获取下一个结点。

        1、获取列表头结点

Front() *Element
package main
import (
	"container/list"
	"fmt"
)
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	//使用列表内置的 Front() 函数,获取列表的头结点
	listHaiCoder := list.New()
	listHaiCoder.PushFront("Hello")
	listHaiCoder.PushFront("HaiCoder")
	listHaiCoder.PushFront("嗨客网")
	element := listHaiCoder.Front()
	fmt.Println("Front =", element.Value)
}

        使用列表内置的 Front() 函数,获取列表的头结点。

        2、获取列表尾结点

Back () *Element
package main
import (
	"container/list"
	"fmt"
)
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	//使用列表内置的 Back() 函数,获取列表的尾结点
	listHaiCoder := list.New()
	listHaiCoder.PushFront("Hello")
	listHaiCoder.PushFront("HaiCoder")
	listHaiCoder.PushFront("嗨客网")
	element := listHaiCoder.Back()
	fmt.Println("Back =", element.Value)
}

        使用列表内置的 Back() 函数,获取列表的尾结点。

        3、获取上一个结点

Prev() *Element
package main
import (
	"container/list"
	"fmt"
)
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	//使用列表内置的 Prev() 函数,获取列表的上一个结点
	listHaiCoder := list.New()
	listHaiCoder.PushFront("Hello")
	element := listHaiCoder.PushFront("HaiCoder")
	listHaiCoder.PushFront("嗨客网")
	preElement := element.Prev()
	fmt.Println("preElement =", preElement.Value)
}

        使用列表内置的 Prev() 函数,获取列表的上一个结点。

        4、获取下一个结点

Next() *Element
package main
import (
	"container/list"
	"fmt"
)
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	//使用列表内置的 Next() 函数,获取列表的下一个结点
	listHaiCoder := list.New()
	listHaiCoder.PushFront("Hello")
	element := listHaiCoder.PushFront("HaiCoder")
	listHaiCoder.PushFront("嗨客网")
	nextElement := element.Next()
	fmt.Println("nextElement =", nextElement.Value)
}

        使用列表内置的 Next() 函数,获取列表的下一个结点。

        到此 Go语言列表list获取元素介绍完成。

以上是关于Go语言list(列表)的主要内容,如果未能解决你的问题,请参考以下文章

Go语言list(列表)

Go语言容器—list

Go语言容器—list

Go语言列表list获取元素

python与go语言对比

七天入门Go语言函数 & 方法 & 接口 | 第三天 登堂入室