码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-06-26 01:15:01      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:nta   其他   添加   声明   保存   头部   div   code   遍历   

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

类似的还有堆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之容器(四):列表

标签:nta   其他   添加   声明   保存   头部   div   code   遍历   

原文地址:https://www.cnblogs.com/VingB2by/p/11087327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!