列表(list)--可以快速增删的非连续空间的容器
列表是一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此之间的关系。列表有多种实现方法,如单链表、双链表等。
在Go语言中,将列表使用container/list包来实现,内部的实现原理是双链表。列表能够高效地进行任意位置的元素插入和删除 *** 作。
一、初始化列表
1、通过container/list包的New方法初始化list
变量名:=list.New()
2、通过声明初始化list
var 变量名 list.List
二、在列表中插入元素
双链表支持从队列前方或后方插入元素,分别对应的方法是PushFront和PushBack。
下面代码显示 如何给list添加元素:
l:=list.New()
l.PushBack("first")
l.PushFront(67)
方法 | 功能 |
InsertAfter(v interface{}, makr *Element) *Element | 在mark点之后插入元素,mark点由其他插入函数提供 |
InsertBefore( v interface{}, make *Element) *Element | 在mark点之前插入元素,mark点由其他插入函数提供 |
PushBackList(other *List) | 添加other列表元素到尾部 |
PushFrontList(other *List) | 添加other列表元素到头部 |
三、从列表中删除元素
代码如下:
package main
import (
"container/list"
)
func main() {
l := list.New()
//尾部添加
l.PushBack("canon")
//头部添加
l.PushFront(67)
//尾部添加后保存元素句柄
element := l.PushBack("first")
//在first之后添加high
l.InsertAfter("high", element)
//在first之前添加noon
l.InsertBefore("noon", element)
//使用
l.Remove(element)
}
*** 作内容 | 列表元素 |
l.PushBack("canon") | canon |
l.PushFront(67) | 67,canon |
element:=l.PushBack("fist") | 67,canon,fist |
l.InsertAfter("high",element) | 67,canon,fist,high |
l.InsertBefore("noon",element) | 67,canon,noon,fist,high |
l.Remove(element) | 67,canon,noon,high |
四、遍历列表--访问列表的每一个元素。
代码如下:
package main
import (
"container/list"
"fmt"
)
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)