Go语言---list的声明、常用方法以及遍历

List所在的库

Go语言的链表实现在其标准库的container/list代码包中。

import "container/list"

这个包含了两个公开的程序实体:List和Element。

  • List代表一个双向链表,其零值为一个空的、可用的链表;
  • Element代表双向链表中的一个元素,相当于C++里面的“iterator”,并且Element中有Prev和Next方法用于得到前一个或者下一个element,element可以直接调用value属性。

List底层定义

type List struct {root Element // sentinel list element, only &root, root.prev, and root.next are usedlen  int     // current list length excluding (this) sentinel element
}
  • root为哨兵链表元素,只能使用 &root, root.prev 和 root.next
  • len为当前列表长度,不包括哨兵元素

Element 底层定义

type Element struct {// Next and previous pointers in the doubly-linked list of elements.// To simplify the implementation, internally a list l is implemented// as a ring, such that &l.root is both the next element of the last// list element (l.Back()) and the previous element of the first list// element (l.Front()).next, prev *Element// The list to which this element belongs.list *List// The value stored with this element.Value any
}
  • 其中,next和previous指针 是双链表的两个指针,为了简化实现,在内部将链表 l 实现为一个环,这样&l.root既是最后一个列表元素(l.Back())的下一个元素,又是第一个列表元素(l.Front())的上一个元素。
  • list为该元素所属的链表
  • Value存储在该元素中的值

注意:Go语言中的list的实现原理是双向链表,list能高效地进行任意位置的元素插入和删除操作。

List的特点

  • 链表元素不是连续存储的,相邻元素之间需要互相保存对方的指针,所以链表所占用的内存空间,往往要比包含相同元素的数组所占的内存大得多。
  • 每个元素存有它所属的那个链表的指针,在初始化时就拥有了头部元素(根元素),也记录了链表的长度(方便遍历和计算)。

声明List

变量名:=list.New() //推荐使用
var 变量名 list.List

在这里插入图片描述
list与切片、Map不一样,没有具体元素类型的限制。
注意:在java、c++等里面,list的成员必须是同一个数据类型,但是Go语言中却允许list里插入任意类型成员。

List添加数据

链表头部插入元素

PushFront
在这里插入图片描述

链表尾部插入元素

PushBack
在这里插入图片描述

在指定数据前/后插入元素

前:InsertBefore
后:InsertAfter
注意InsertBefore以及InsertAfter 插入元素的前提是元素时链表上的值,如果不是,则不会修改链表,并且链表不能为空。

在这里插入图片描述

将指定数据移到最前/最后

前:MoveToFront
后:MoveToBack
在这里插入图片描述

在链表前/后插入链表

前:PushFrontList
后:PushBackList
在这里插入图片描述

删除某个元素

Remove
在这里插入图片描述

List的遍历

func printIterateList(l list.List) {for e := l.Front(); e != nil; e = e.Next() {fmt.Printf("%T ,%v \t", e.Value, e.Value)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第279题完全平方数

题目: 题解: class Solution { public:// 判断是否为完全平方数bool isPerfectSquare(int x) {int y sqrt(x);return y * y x;}// 判断是否能表示为 4^k*(8m7)bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7;}int numSquares(i…

注册邮箱需要实名认证吗

注册邮箱需要进行实名认证吗?都需要认证哪些信息呢?邮箱实名认证提高安全性和责任感,但可能涉及隐私顾虑。本文将详细介绍邮箱实名认证的相关内容。 一、邮箱实名认证的定义和目的 1、定义 电子邮件实名验证是指客户在注册电子邮件服务时&…

初阶数据结构之栈和队列

栈和队列是两种特殊的线性表,都可以用数组或者链表来实现,接下来就让我们看看栈和队列会有什么奥秘吧~ 目录 1.栈 1.1栈的概念 1.2栈的实现 1.2.1 Stack.h 1.2.2 Stack.c 1.2.3 test.c 2.队列 2.1队列的概念 2.2队列的实现 2.2.1 Queue.h 2…

【科研】# Taylor Francis 论文 LaTeX template模版 及 Word模版

【科研写论文】系列 文章目录 【科研写论文】系列前言一、Word 模板(附下载网址):二、LaTeX 版本方法1:直接网页端打开(附网址)方法2:直接下载到本地电脑上编辑下载地址说明及注意事项 前言 给…

【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(下)

【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(下) 大家好 我是寸铁👊 【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(下)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分&…

配置web服务器练习

4练习要求: 练习一:配置web服务器,当访问网站 www.haha.com 时显示:haha 练习二:配置web服务器,当访问网站 www.xixi.com/secret/ 时显示:this is secret 具体步骤: 1、配置yum…

压测实操--produce压测方案

作者:九月 环境信息: 操作系统centos7.9,kafka版本为hdp集群中的2.0版本。 Producer相关参数 使用Kafka自带的kafka-producer-perf-test.sh脚本进行压测,该脚本参数为: 在producer涉及到性能的关键因素可能会存在如…

记录|使用HslCommunication库进行写入Real数据的坑

项目场景: 现在已经通过HslCommunication连接上了PLC,需要对DB1.DBD10的位置处进行数据写入。 问题描述 但是进行将12.2写入指定位置DB1.DBD10时,发现无法从博图中实时检测到数据的写入。 下面是我当时错误的数据写入方法:【主…

光伏发电管理软件:光伏企业的核心驱动力

光伏产业面对日益增长的装机容量、复杂多变的运维需求以及激烈的市场竞争,光伏企业如何高效管理、优化运营、提升效益,成为了行业关注的焦点。在此背景下,鹧鸪云光伏发电管理软件应运而生,并逐渐成为光伏企业的核心驱动力。 一、提…

回文数-双指针

题目描述&#xff1a; 个人题解&#xff1a; 先将整数转换成字符串&#xff0c;再利用双指针逐一比较数字。 代码实现&#xff1a; class Solution { public:bool isPalindrome(int x) {if(x<0||(x%100&&x!0)){return false;}//c标准库调用&#xff0c;将整数下转…

opencv - py_calib3d - py_calibration 相机校准

文章目录 Camera Calibration 相机校准目标基础知识代码设置校准去失真1. 使用 **cv.undistort()**2. 使用 **remapping** 重新投影误差 Camera Calibration 相机校准 目标 在本节中&#xff0c;我们将学习 相机造成的失真类型如何找到相机的内在和外在属性如何根据这些属性…

防护勒索攻击:一场勒索攻击与智能防护的较量

近年来&#xff0c;云上数据安全已经成为企业的又一大难题&#xff0c;尤其是勒索攻击频发&#xff0c;有组织的黑客攻击目标已经从核心数据窃取扩展到金融、交通、能源、通信等行业的关键信息基础设施&#xff0c;对企业数据安全构成了极大的威胁和挑战。 同时AI时代&#xff…

tcache attack

Tcache Attack tcache让堆利用更加简单&#xff1a; tcache回顾&#xff1a; 在 tcache 中新增了两个结构体&#xff0c;分别是 tcache_entry 和 tcache_perthread_struct&#xff1a; /* We overlay this structure on the user-data portion of a chunk when the chunk is …

功能教学——如何快速理解并使用数据助手

在企业的数字化管理中&#xff0c;数据处理的重要性不容小觑。它如同一根红线&#xff0c;贯穿企业运营的各个环节&#xff0c;对于提升决策效率、优化运营流程以及增强市场竞争力等方面都发挥着至关重要的作用。而百数的数据助手&#xff0c;作为一款高效的数据处理工具&#…

【MySQL】:表操作语法大全

表内容的操作 增删改查 CRUD (create、retrieve、update、delete) 新增 基本语法 语法为&#xff1a; insert into 表名 values (值&#xff0c;值&#xff0c;值...);这里的列数和类型&#xff0c;要和表结构匹配插入中文的话&#xff0c;要确保数据库创建的时候要设置字…

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…

基于SpringBoot的矩形范围面时空分析-以震中附近历史地震为例

目录 前言 1、分析的必要性 2、分析的紧迫性 一、数据库物理模型及空间分析实现 1、数据库物理模型 2、空间数据库中的空间查询分析 二、Java后台程序开发 1、模型层设计 2、业务层的设计与实现 三、WebGIS功能设计与实现 1、同时展示4幅地图 2、初始化地图 3、展示…

CID引流-拼多多案例

目前已实现拼多多等CID链路&#xff0c;本文以拼多多链路为例&#xff0c;说明具体实施过程 1. 拼多多链路流程 以下是通过前期调研&#xff0c;得到的具体业务流程&#xff1a; 商家申请资质以及授权部分&#xff0c;进行商品推广自研落地页&#xff0c;生成落地页在巨量引…

MAVSDK-Rust源码示例编译与使用

1.启动PX4模拟器并监听14540端口 2.编译并运行MAVSDK_Server 编译: 安装: 运行mavsdk_server 3.克隆并编译MAVSDK-Rust 运行info示例 运行其它示例,参考git 在RustRover中运行示例

169. 多数元素【 力扣(LeetCode) 】

一、题目描述 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 二、测试用例 示例 1&#xff1a; 输入&#xff1a;nums [3,2,…