以下是《Go语言100个实战案例》中的 数据结构与算法篇 - 案例24:自定义队列结构 的完整内容,帮助初学者通过自定义结构体来实现队列的数据结构。

🎯 案例目标

实现一个自定义的队列结构,并提供常见的队列操作:入队(Enqueue)、出队(Dequeue)、查看队列头元素(Peek)和判断队列是否为空(IsEmpty)。


🧩 应用场景

  • • 队列是一种先进先出的数据结构,广泛应用于任务调度、资源管理、消息队列等领域。
  • • 学习通过 Go 的结构体与切片(slice)实现队列,掌握队列的基本操作。

🧠 涉及知识点

  • • 使用结构体定义队列(Queue)
  • • 队列操作的基本方法(Enqueue、Dequeue、Peek、IsEmpty)
  • • 使用 Go 的切片(slice)动态调整队列大小

💻 示例代码:自定义队列结构

package mainimport "fmt"// 定义队列结构体
type Queue struct {elements []interface{} // 用切片存储队列元素
}// 创建一个新的队列
func NewQueue() *Queue {return &Queue{}
}// 判断队列是否为空
func (q *Queue) IsEmpty() bool {return len(q.elements) == 0
}// 获取队列的大小
func (q *Queue) Size() int {return len(q.elements)
}// 入队操作
func (q *Queue) Enqueue(item interface{}) {q.elements = append(q.elements, item)
}// 出队操作
func (q *Queue) Dequeue() (interface{}, bool) {if q.IsEmpty() {return nil, false // 队列为空,返回错误}// 获取队列头元素并移除item := q.elements[0]q.elements = q.elements[1:]return item, true
}// 查看队列头元素
func (q *Queue) Peek() (interface{}, bool) {if q.IsEmpty() {return nil, false // 队列为空,返回错误}return q.elements[0], true
}func main() {queue := NewQueue() // 创建一个队列// 测试入队操作queue.Enqueue(10)queue.Enqueue(20)queue.Enqueue(30)fmt.Println("队列的大小:", queue.Size()) // 输出队列的大小// 查看队列头元素front, _ := queue.Peek()fmt.Println("队列头元素:", front)// 测试出队操作item, _ := queue.Dequeue()fmt.Println("出队的元素:", item)fmt.Println("出队后的队列大小:", queue.Size())// 再次查看队列头元素front, _ = queue.Peek()fmt.Println("新的队列头元素:", front)// 出队直到队列为空for !queue.IsEmpty() {item, _ = queue.Dequeue()fmt.Println("出队的元素:", item)}
}

🛠 技术说明

功能使用方法
定义队列结构体type Queue struct { elements []interface{} }
队列操作方法EnqueueDequeuePeekIsEmpty
切片操作append、切片截取 q.elements[1:]
空值检查IsEmpty 判断队列是否为空
多种数据类型存储使用 interface{} 存储任何类型的数据

📤 示例运行

队列的大小: 3
队列头元素: 10
出队的元素: 10
出队后的队列大小: 2
新的队列头元素: 20
出队的元素: 20
出队的元素: 30

🧪 拓展练习

  • • 队列的扩展:实现一个支持队列最大长度的功能,当队列达到最大长度时,禁止继续入队。
  • • 队列应用
    • • 用队列实现宽度优先搜索(BFS)。
    • • 用队列模拟任务调度系统,处理多个任务的执行顺序。
  • • 双端队列:扩展为双端队列(Deque),允许从两端进行插入和删除操作。
  • • 循环队列:实现循环队列,通过修改头尾指针避免队列空间的浪费。

✅ 小结

通过本案例,你实现了一个自定义队列结构,并掌握了队列的基本操作。队列作为一种常见的基础数据结构,广泛应用于实际开发中,尤其是在任务调度、消息队列等场景中。

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

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

相关文章

Windows-WSL-Docker端口开放

本文介绍如何在局域网内访问Windows服务器端口,特别是针对已安装WSL环境并在其中运行Docker服务的情况。主要解决Docker服务向局域网开放端口的配置问题步骤一:配置转发当你的应用程运行在WSL中时,需要执行此步骤。在宿主机(windo…

面试知识梳理-vue3和vue2区别

vue3相对于vue2的优势 性能更好体积更小更好的ts支持(vue3 ts开发)更好的代码组织更好的逻辑抽离更多新功能(vue2其实也都能自己做出来) 更好的代码组织 Composition API 的革新 Vue 2 采用 ​​Options API​​,通过 …

栈的核心原理

1 栈的概念及结构栈是一种特殊的线性表,其特点是只允许在固定的一端进行插入和删除操作。进行操作的一端称为栈顶,另一端称为栈底。栈中的元素遵循后进先出(LIFO,Last In First Out) 原则。压\入\进栈(Push…

【无标题】暗物质暗能量——以下是用11维拓扑量子色动力学模型解释暗物质和暗能量的完整理论框架。

暗物质暗能量——以下是用11维拓扑量子色动力学模型解释暗物质和暗能量的完整理论框架。暗物质的拓扑本质 1. 跨桥零模振动理论 暗物质对应跨桥结构的基态振动模: math \phi_{\text{DM}} \frac{1}{\sqrt{6}} \sum_{f1}^6 \mathcal{B}_f^{(0)} $$ 其中 $\mathcal{B}…

【接口自动化】-1- 初识接口

一、什么是接口 接口涉及到四个实体:(我去饭店点餐) 我是客人 :客户端 厨师:服务器 服务员:接口 菜单:接口文档 接口定义了一套信息规则让两个系统之间互相不必知道对方的内部&#xff0c…

华为FTTR光猫V173 F30改公开版界面 附带真正的s161补全一体固件

【本文介绍】 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 这款FTTR的V173 F30看着颜值很高 也很实用 毕竟是XGPON万兆的光猫…

【学习】数字化车间与智能工厂如何推进制造业转型

在制造业转型升级的浪潮中,数字化车间与智能工厂已成为推动产业变革的核心引擎。前者通过物联网、大数据与自动化技术的深度融合,实现生产流程的精细化管控与资源优化;后者则依托人工智能、5G通信与数字孪生技术,构建起具备自感知…

HTML元素与高级功能完全教程:从基础到精通

目录 章节1:HTML的灵魂——元素的本质与结构化思维 1.1 元素的核心:标签、属性与内容 1.2 语义化的革命 1.3 常见的“坑”与避坑指南 章节2:表单元素:打造交互的基石 2.1 表单基础:与核心控件 2.2 高级输入类型与验证 2.3 表单的可访问性与用户体验 章节3:HTML5多媒…

IP证书:构建数字世界知识产权安全防线的基石

引言 在数字化浪潮席卷全球的今天,知识产权(IP)的保护已成为企业、机构乃至个人面临的重要挑战。无论是商业秘密、专利技术,还是数字版权,其安全性和可信度都直接影响着创新生态的健康发展。而作为数字安全的核心工具…

CAD插件『PDF转CAD格式』安装教程

在工程设计领域,常规流程是将完成的CAD图纸直接转换为PDF格式或输出为纸质蓝图进行分发。由于PDF文件具有跨平台兼容性强、防篡改等特性,在工程交付环节被广泛采用。但当需要对既有图纸进行二次修改时,PDF格式的编辑局限性便凸显出来&#xf…

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-26,(知识点:硬件电路的调试方法:信号追踪,替换,分段调试)

目录 1、题目 2、解答 一、信号追踪法(Signal Tracing) 原理 操作步骤 应用场景 二、替换法(Replacement Method) 原理 操作要点 应用场景 三、分段调试法(Segmented Debugging) 原理 操作步骤…

Qt中QObject类的核心作用与使用

一、QObject类简介 各位小伙伴,在Qt的世界里,QObject类就像是"万物之母",它是Qt对象模型的核心基类。几乎所有的Qt类都直接或间接地继承自QObject。QObject提供了很多重要的功能,比如对象树管理、信号与槽机制、元对象系…

TVBOXOS6.0双端APP二开源码完整版全开源源码重构版

今天介绍的TVBOXOS手机版App源码采用了纯64位的前端架构,版本则基于本站修正过的6.0前端进行构建。经过多次优化,这款应用不仅操作流畅,界面设计也颇具美感。前端完全集成了安卓原生Java架构,而后端管理采用的是PHP的如意系统。前…

VoWiFi技术深度解析:架构、流程与演进

在蜂窝网络覆盖盲区实现高清语音通话的秘密,就藏在这套基于IMS的Wi-Fi呼叫系统中 一、VoWiFi概述与技术价值 VoWiFi(Voice over Wi-Fi)是一种基于IMS核心网的语音通信技术,允许用户通过Wi-Fi接入运营商的EPC(演进分组核心网)和IMS系统,实现与传统蜂窝网络无缝集成的语音…

DuoPlus云手机再上新:统一配置品牌型号、代理分组与便捷搜索功能全面提升!

前言:在这个日新月异的时代,每一个微小的变化都可能引领行业新潮流,DuoPlus云手机基于不断创新的原则,把用户的需求放在第一位,不断对产品进行调整优化,致力于给用户最全面的产品体验。DuoPlus通过收集用户…

C/C++内存陷阱:为何返回局部变量地址是“定时炸弹”?

资料合集下载链接: ​https://pan.quark.cn/s/472bbdfcd014​ 在编程世界里,有些错误就像是隐藏在代码里的“定时炸弹”,平时可能相安无事,但在某个不经意的时刻就会引爆,导致程序崩溃或出现无法解释的诡异行为。今天,我们要拆解的,就是这样一个极具迷惑性又极其危险的…

编程与数学 03-001 计算机组成原理 21_服务器计算机组成实例解析

编程与数学 03-001 计算机组成原理 21_服务器计算机组成实例解析一、引言二、硬件架构特点(一)多核/多处理器设计(二)大容量高带宽内存(三)存储系统(四)高可用性设计三、性能优化技术…

opencv简介(附电子书资料)

概述 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,广泛应用于图像处理、目标检测、模式识别等领域,是计算机视觉领域最常用的工具之一。电子书学习资料:https://pan.quark.cn…

纳米编辑器之Nano 编辑器退出**的详细操作指南

以下是关于 Nano 编辑器退出的详细操作指南,涵盖多种常见场景及技巧: 基础退出与保存操作 ✅保存修改并退出(最常用)快捷键触发退出:按下 Ctrl X[1][2][4]。确认保存:若需保存改动,按 Y&#x…

<HMI><威纶通><触摸屏>基于威纶通MT8106iQ触摸屏,实现自定义登录窗口(优化)

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如…