Go语言list(列表)

本文介绍了Go语言中使用container/list包实现的双链表数据结构,包括列表的初始化、元素插入与删除、遍历等操作。通过实例展示了如何创建、添加和删除元素,并强调了列表在元素类型上的灵活性以及由此带来的潜在问题。此外,文章还对比了列表与切片和map的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

2、列表的原理可以这样理解:假设A、B、C三个人都有一个微信号,如果A把微信号分享给B,B再把微信号分享发给C…,这个分享的过程就建立了一个单链表结构

3、如果在这个基础上,C开始将微信号分享给自己所有微信号的人,自己微信号的所有人,再分享给他们的各自的人,这样就形成了一个双链表

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

5、初始化列表

list 的初始化有两种方法:

  • 分别是使用 New() 函数
  • 使用var 关键字声明
    两种方法的初始化效果都是一致的。
  1. 通过 container/list 包的 New() 函数初始化 list
变量名 := list.New()
  1. 通过 var 关键字声明初始化 list
var 变量名 list.List

列表切片map 不同之处

  • 列表并没有具体元素类型的限制,因此,列表的元素可以是任意类型,这既带来了便利,也引来一些问题,例如给列表中放入了一个 interface{} 类型的值,取出值后,如果要将 interface{} 转换为其他类型将会发生宕机。

6、在列表中插入元素

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

这两个方法都会返回一个 *list.Element 结构,如果在以后的使用中需要删除插入的元素,则只能通过 *list.Element 配合 Remove() 方法进行删除,这种方法可以让删除更加效率化,同时也是双链表特性之一。

1、添加元素

myList := list.New()
myList.PushBack("aaaaaaaa")
myList.PushFront("bbbbbbbb")


// 尾部添加后保存元素句柄
element := myList.PushBack("ccccccccccc")

 // 在fist之后添加high
myList.InsertAfter("high", element)
// 在fist之前添加noon
myList.InsertBefore("noon", element)
// 删除元素
myList.Remove(element)

遍历列表,访问列表的每一个元素

myList := list.New()

//在list里添加数据
myList.PushFront("aaaaa")
myList.PushBack("bbbbb")

//列表遍历
for i := myList.Front(); i != nil; i = i.Next() {
	fmt.Println(i.Value)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值