从零开始学Go之容器:列表

Posted vingb2by

tags:

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

链表内部的实现原理是双链表,可以高效地进行任意位置的元素插入和删除操作

类似的还有堆heap和环列表ring,声明和初始化的方式是相同的,只是原理以及操作的函数不同,当理解了原理操作也是很简单的。

 

声明与初始化:

list 的初始化有两种方法:New 和声明。两种方法的初始化效果都是一致的。

变量名 := list.New()

var 变量名 list.List

//通过 container/list 包的 New 方法初始化 list
a := list.New()
//通过声明初始化list
var v list.List

 

插入元素:

头部插入:PushFront(值)

尾部插入:PushBack(值)

标记点前插入:InsertBefore(值, 标记点)

标记点后插入:InsertAfter(值, 标记点)

标记点是一个指针,通过其他函数(例如Front(),Back(),插入时的返回值等)获取

 l := list.New()
 // 尾部添加
 l.PushBack("fist")
 // 尾部添加
 l.PushBack("canon")
 // 头部添加
 l.PushFront(67)
 // 尾部添加后保存元素句柄
 element := l.PushBack("fist")
 // 修改元素句柄为67
 element = l.Front()
 // 在fist之前添加noon
 l.InsertBefore("noon", element)
 // 在fist之后添加high
 l.InsertAfter("high", element)

 

删除元素:

Remove(标记点)

func main() 
 l := list.New()
 // 尾部添加
 l.PushBack("fist")
 // 尾部添加
 l.PushBack("canon")
 // 头部添加
 l.PushFront(67)
 // 尾部添加后保存元素句柄
 element := l.PushBack("fist")
 // 修改元素句柄为67
 element = l.Front()
 // 在fist之前添加noon
 l.InsertBefore("noon", element)
 // 在fist之后添加high
 l.InsertAfter("high", element)
 // 删除67
 l.Remove(element)

 

列表遍历:

通过Front()和Back()可以获取列表的头和尾的指针

func main() 
 l := list.New()
 l.PushBack("canon")
 l.PushFront(67)
 for i := l.Front(); i != nil; i = i.Next() 
  fmt.Println(i.Value)
 

运行结果

67

canon

以上是关于从零开始学Go之容器:列表的主要内容,如果未能解决你的问题,请参考以下文章

从零开始学Go之容器:映射

从零开始学Go之基本:包函数声明与格式化输出

从零开始学Go之基本语法:基本数据类型与变量

从零开始学多线程之构建快

从零开始学Python第08课:常用数据结构之列表-1

从零开始学c++之STL——vector的介绍和使用