Go语言基于 container/list 实现队列与堆栈

橘子海
橘子海
发布时间:2026-10-14| 6人浏览过
原创

本文介绍在Go语言中如何利用标准库 container/list 包实现队列(Queue)和堆栈(Stack)。通过演示 list.New() 初始化及 PushBack、Front、Back、Remove 等关键方法的操作顺序,展示数据结构的基本用法。

结果或目标

利用 Go 标准库中的双向链表实现 FIFO(先进先出)的队列行为和 LIFO(后进先出)的堆栈行为,无需手动处理指针。

准备条件

  • 已安装 Go 开发环境。
  • 熟悉 Go 基础语法及 fmt 包的输出方式。

真实操作顺序

第1步:引入依赖并初始化列表

导入 container/list 包用于提供链表功能,创建一个新的双向链表实例作为队列/堆栈的基础容器。

package main
import (
    "fmt"
    "container/list"
)
func main() {
    // 生成队列,实际上是一个双向链表
    l := list.New()
}

第2步:数据入队(压栈)

使用 PushBack 方法向链表尾部追加元素。在队列场景下,这代表“入队”;在堆栈场景下,也通常作为“压栈”的一端(尽管标准堆栈有时涉及头部插入,但此处演示统一使用尾部添加)。

// 入队, 压栈
l.PushBack(1)
l.PushBack(2)
l.PushBack(3)
l.PushBack(4)

第3步:从队列前端出队

调用 Front() 获取链表头部的元素节点,随后使用 Remove() 移除该节点以实现“出队”操作。这是典型的 FIFO 行为。

// 出队
i1 := l.Front()
l.Remove(i1)
fmt.Printf("%d\n", i1.Value)

第4步:从堆栈后端弹出

调用 Back() 获取链表尾部的元素节点,移除后实现 LIFO 的“出栈”效果。

// 出栈
i4 := l.Back()
l.Remove(i4)
// 注意:原代码此处有误印,应输出 i4.Value
fmt.Printf("%d\n", i4.Value) // 修正了原稿中的 i1 为 i4 以匹配上下文逻辑

完成判断

运行上述代码,控制台应依次打印出队列的第一个元素和堆栈的最后一个元素,证明双向链表可灵活复用为两种常见数据结构。

简要总结

Go 语言的 container/list 提供了强大的双向链表支持,通过简单的 API 调用即可模拟队列与堆栈的逻辑,适合需要轻量级数据结构的场景。以上就是Go语言的队列和堆栈实现方法的详细内容,更多关于Go语言程序设计相关资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。