前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年07月 Go教学课程 023-Go容器之列表

【愚公系列】2022年07月 Go教学课程 023-Go容器之列表

作者头像
愚公搬代码
发布2022-08-01 08:51:09
1850
发布2022-08-01 08:51:09
举报
文章被收录于专栏:历史专栏

文章目录


一、Go容器之列表

1.列表的定义

列表是一种数据结构,由多元素成的有限序列,即按照一定的线性顺序排列而成的数据项的集合,在这种数据结构上可以进行元素的的插入,删除,修改,和查找。

列表的两种主要表现是数组和链表,栈和队列是两种特殊类型的列表。列表(list)底层常见的数据结构有: 单链表、双链表等。

2.Go中的列表

在 Go 语言中,列表的实现都在 container/list 包中,内部实现原理是双链表。

列表(list)能够方便高效地进行元素的删除、插入操作。

3.列表的声明

代码语言:javascript
复制
变量名 := list.New()
//或
var 变量名 = list.List

4.列表的操作

4.1 列表添加元素

列表添加元素如下所示:

方法

功能

InsertAfter(v interface{}, mark *Element) *Element

在 mark 点后面插入元素

InsertBefore(v interface{}, mark *Element) *Element

在 mark 点前面插入元素

PushFrontList(other *List)

添加 other 列表中的元素到头部

PushBackList(other *List)

添加 other 列表中的元素到尾部

相关案例:

代码语言:javascript
复制
package main

import (
	"container/list"
	"fmt"
)

func main() {
	l := list.New()

	l.PushFront("头部愚公")
	l.PushBack("尾部愚公")

	// 遍历
	for i := l.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}
}
在这里插入图片描述
在这里插入图片描述

其中 i := l.Front() 表示初始赋值,用来获取列表的头部下标; 然后每次会循环会判断 i != nil,若等于空,则会退出循环,否则执行 i.Next()继续循环下一个元素;

4.1 列表删除元素

代码语言:javascript
复制
package main

import (
	"container/list"
	"fmt"
)

func main() {
	l := list.New()

	// 头部添加字符串
	l.PushFront("愚公1号")

	// 尾部添加字符串
	l.PushBack("愚公2号")

	// 尾部添加一个整型,并保持元素句柄
	element := l.PushBack(1)

	// 在 1 之后添加字符串 2
	l.InsertAfter("2", element)

	// 在 1 之前添加字符串 0
	l.InsertBefore("0", element)
	for i := l.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}
	// 删除 element 对应的元素
	l.Remove(element)

	// 遍历
	for i := l.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}
}
在这里插入图片描述
在这里插入图片描述

4.3 列表获取元素

4.3.1 获取列表头结点

代码语言:javascript
复制
package main

import (
	"container/list"
	"fmt"
)

func main() {
	l := list.New()

	// 头部添加字符串
	l.PushFront("愚公1号")

	// 尾部添加字符串
	l.PushBack("愚公2号")

	// 尾部添加一个整型,并保持元素句柄
	element := l.PushBack(1)

	// 在 1 之后添加字符串 2
	l.InsertAfter("2", element)
	
	fmt.Println("Front =", l.Front().Value)
}
在这里插入图片描述
在这里插入图片描述

4.3.2 获取列表尾结点

代码语言:javascript
复制
package main

import (
	"container/list"
	"fmt"
)

func main() {
	l := list.New()

	// 头部添加字符串
	l.PushFront("愚公1号")

	// 尾部添加字符串
	l.PushBack("愚公2号")

	// 尾部添加一个整型,并保持元素句柄
	element := l.PushBack(1)

	// 在 1 之后添加字符串 2
	l.InsertAfter("2", element)

	fmt.Println("Front =", l.Back().Value)
}
在这里插入图片描述
在这里插入图片描述

4.3.3 获取上一个结点

代码语言:javascript
复制
package main

import (
	"container/list"
	"fmt"
)

func main() {
	//使用列表内置的 Prev() 函数,获取列表的上一个结点
	listHaiCoder := list.New()
	listHaiCoder.PushFront("1")
	element := listHaiCoder.PushFront("2") //定义节点位置
	listHaiCoder.PushFront("3")
	preElement := element.Prev()
	fmt.Println("preElement =", preElement.Value)
}
在这里插入图片描述
在这里插入图片描述

4.3.4 获取下一个结点

代码语言:javascript
复制
package main

import (
	"container/list"
	"fmt"
)

func main() {
	//使用列表内置的 Prev() 函数,获取列表的上一个结点
	listHaiCoder := list.New()
	listHaiCoder.PushFront("1")
	element := listHaiCoder.PushFront("2") //定义节点位置
	listHaiCoder.PushFront("3")
	preElement := element.Next()
	fmt.Println("preElement =", preElement.Value)
}
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/07/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Go容器之列表
    • 1.列表的定义
      • 2.Go中的列表
        • 3.列表的声明
          • 4.列表的操作
            • 4.1 列表添加元素
            • 4.1 列表删除元素
            • 4.3 列表获取元素
            • 4.3.1 获取列表头结点
            • 4.3.2 获取列表尾结点
            • 4.3.3 获取上一个结点
            • 4.3.4 获取下一个结点
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档