博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零开始学Go之容器(四):列表
阅读量:4561 次
发布时间:2019-06-08

本文共 1242 字,大约阅读时间需要 4 分钟。

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

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

 

声明与初始化:

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

变量名 := list.New()

var 变量名 list.List

//通过 container/list 包的 New 方法初始化 lista := list.New()//通过声明初始化listvar 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

转载于:https://www.cnblogs.com/VingB2by/p/11087327.html

你可能感兴趣的文章
Codeforces Round #321 (Div. 2)
查看>>
Android SDK Manager 更新代理配置
查看>>
kafka版本0.8.2.0-Producer Configs之request.required.acks
查看>>
一个强悍的极简单递归小例子帮你从程序执行的角度理解递归
查看>>
2016012026+小学四则运算练习软件项目报告
查看>>
Android - 读取网站json并显示到Activity
查看>>
idea Live Template 快速使用
查看>>
git 初级
查看>>
[hdu4347]The Closest M Points(平衡树式kdtree)
查看>>
[hdu2874]Connections between cities(LCA+并查集)
查看>>
web端功能测试总结(二)
查看>>
Thymeleaf-模板引擎
查看>>
去重算法
查看>>
POJ 3298 Antimonotonicity (思维)
查看>>
c#获取硬件信息
查看>>
【转】寻找第K大的数的方法总结
查看>>
php redis安装
查看>>
SQL 语句 - Select(8): 分组条件
查看>>
如何把UIView转成UIImage,解决模糊失真问题
查看>>
ISAPI_Rewrite应用技巧与方法
查看>>