【Golang】实现简单队列(Queue)数据结构

 在计算机科学中,队列是一种特殊的线性数据结构,它遵循FIFO(先进先出)原则。队列中的元素只能从一端(称为队尾或后端)添加,并且只能从另一端(称为队头或前端)移除。这种特性使得队列在许多算法和数据结构中都有广泛的应用,例如操作系统中的任务调度、网络通信中的数据包排队等。

 在Go语言中,我们可以使用切片(slice)来实现一个简单的队列。下面是一个示例代码,展示了如何定义一个队列结构体,并实现初始化、入队、出队和获取队列长度的方法。

package common  import "fmt"  // 定义队列结构体  
type Queue struct {  Items []interface{}  // MaxSize int  // 可以设置最大长度
}  // 初始化队列  
func (q *Queue) Init() *Queue {  return &Queue{}  
}  // 入队操作  
func (q *Queue) Enqueue(item interface{}) {  q.Items = append(q.Items, item)  
}  // 出队操作  
func (q *Queue) Dequeue() *interface{} {  if len(q.Items) == 0 {  return nil // 返回默认值或者返回错误信息  }  item := q.Items[0]  q.Items = q.Items[1:]  return &item  
}  // 获取队列长度  
func (q *Queue) Size() int {  return len(q.Items)  
}  // 示例用法  
func main() {  queue := &Queue{} // 初始化队列  queue.Enqueue("item1") // 入队操作  queue.Enqueue("item2")  queue.Enqueue("item3")  fmt.Println(queue.Size()) // 输出:3,表示队列中有3个元素  item := queue.Dequeue() // 出队操作,返回值为指向队列中第一个元素的指针  if item != nil {  fmt.Println(*item) // 输出:item1,表示出队的是第一个元素  } else {  fmt.Println("队列为空") // 队列为空时的处理逻辑  }  fmt.Println(queue.Size()) // 输出:2,表示队列中还有2个元素  
}

 这个示例代码展示了如何使用Go语言实现一个简单的队列。通过定义一个结构体,我们可以使用切片来存储队列中的元素。在结构体中,我们实现了初始化、入队、出队和获取队列长度的方法。在示例用法中,我们演示了如何使用这些方法来操作队列。

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

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

相关文章

200SMART作为智能控制器和智能设备使用

200SMART固件版本在V2.5以上的标准型CPU都支持PROFINET IO控制器和IO设备使用。 S7-200SMART作为智能设备仅支持1个IO控制器,可配置的输入输出存储区都为128个字节,地址范围分别为I(Q)1152.0到I(Q)1279.7;每个CPU支持最多8个PROFINET IO设备&#xff0c…

[字符串专题]反转|数字替换|单词反转|右旋转字符串

1.字符串反转 class Solution { public:void reverseString(vector<char>& s) {for(int i0,js.size()-1;i<j;i,j--){char tmps[j];s[j]s[i];s[i]tmp;}} }; 2. 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xf…

SQL笔记 -- 数据库结构优化

1. 拆分表&#xff08;冷热数据分离&#xff09; 不常用的数据为冷数据&#xff0c;反之则为热数据。如果一个表中的数据存在明显的使用频率差异&#xff0c;那么可以将冷热数据分离。通过这种分解可以提高表的查询效率。对于字段很多且有些字段使用不频繁的表&#xff0c;可以…

$route和$router的区别

$route 对象是一个包含当前路由信息的对象&#xff0c;它提供了对当前激活的路由的访问和控制。$route 对象具有以下属性&#xff1a; $route.path&#xff1a;当前路由路径的字符串表示。 $route.params&#xff1a;一个对象&#xff0c;包含动态路由参数和查询参数。 $rout…

Rust之构建命令行程序(三):重构改进模块化和错误处理

开发环境 Windows 10Rust 1.74.1 VS Code 1.85.1 项目工程 这次创建了新的工程minigrep. 重构改进模块化和错误处理 为了改进我们的程序&#xff0c;我们将修复与程序结构及其处理潜在错误的方式有关的四个问题。首先&#xff0c;我们的main函数现在执行两项任务:解析参数和…

adb、monkey的下载和安装

adb下载 官网网址&#xff1a;Downloads - ADB Shell 尽量不要下载最新的ADB Kits&#xff0c;因为兼容性可能不太好。 点击下载 ADB Kits 作者下载的版本是1.0.36 解压adb 到指定的目录即可。 然后把adb配置 环境变量。 检查adb是否安装成功

Java的特点及解析

Java 的一些主要特点及解析&#xff1a; 面向对象编程&#xff08;OOP&#xff09;&#xff1a;Java 是一种面向对象编程语言&#xff0c;它将代码组织成多个相互关联的对象&#xff0c;每个对象具有特定的属性和行为。这种编程范式使得代码更易于理解、维护和扩展。 跨平台性…

React导航守卫(V6路由)

下载&#xff1a; npm i react-router-dom 当登录之后才可以去访问其他页面 (1)在登录页面&#xff0c;我们点击登录的时候&#xff0c;保存一个token,在登录页面引入重定向useNavigate import { useNavigate } from react-router-domconst navigate useNavigate()const l…

java数据库操作

数据库类分析 java.sql.DriverManager&#xff1a; 驱动管理器静态类&#xff0c;类加载时会自动加载配置文件中jdbc.drivers配置的驱动&#xff0c;所有数据库驱动类加载时会调用DriverManager.registerDriver注册自己到DriverManager中&#xff0c;如下代码&#xff0c;为or…

项目开发中安全问题及解决方法-----用户标识不能从客户端获取

服务端直接使用了客户端传过来的用户标识&#xff0c;导致了安全问题&#xff1a; GetMapping("wrong") public String wrong(RequestParam("userId") Long userId) {return "当前用户Id&#xff1a;" userId; }开发同学没有正确认识接口或服务…

Git学习笔记(第1章):Git概述

Git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 Git易于学习&#xff0c;占地面积小&#xff0c;性能极快。它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce 和…

常见的系统性能指标:QPS、TPS

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项目…

华为设备NAT的配置

实现内网外网地址转换 静态转换 AR1&#xff1a; sys int g0/0/0 ip add 192.168.10.254 24 int g0/0/1 ip add 22.33.44.55 24 //静态转换 nat static global 22.33.44.56 inside 192.168.10.1 动态转换 最多有两台主机同时访问外网 AR1&#xff1a; sys int g0/0/0 ip add…

MySQL5.7之grant

官网地址&#xff1a;MySQL :: MySQL 5.7 Reference Manual :: 13.7.1.4 GRANT Statement 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Mysql5.7参考手册 / ... / 赠款声明 13.7.1.4 GRANT Statement GRAN…

享元模式介绍

目录 一、享元模式介绍 1.1 享元模式定义 1.2 享元模式原理 1.2.1 享元模式类图 1.2.2 模式角色说明 1.2.3 示例代码 二、享元模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 类图 2.2.2 具体实现 2.2.2.1 抽象享元类 2.2.2.2 共享享元类-白色棋子 2.2.2.3 共享享元…

计算机网络——运输层(1)暨小程送书

计算机网络——运输层&#xff08;1&#xff09;暨小程送书 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 运输层概述两个主要协议运输层和网络层的关系网络层运输层总结 多路复用与多路分解多路复用多路分解不同的技术实现时分复用&#xff08;TDM&#xff09;频分复…

[STM32F407ZET6] GPIO

GPIO模式 F4的GPIO功能比F1的功能更多一些, 但是整体框架一样. F4的输出配置和F1的不同, F4的配置后, 施密特触发器将会开启, 还会对输入寄存器进行采样读取. F1的配置后, 推挽输出将会关闭施密特触发器, 开漏模式读取会读输入寄存器, 推挽模式会读取输出寄存器的值. 输出(全…

Java毕业设计-基于jsp+servlet的家用电器购物商城管理系统-第87期

获取源码资料&#xff0c;请移步从戎源码网&#xff1a;从戎源码网_专业的计算机毕业设计网站 项目介绍 基于jspservlet的家用电器购物商城管理系统&#xff1a;前端 jsp、jquery、layui&#xff0c;后端 servlet、jdbc&#xff0c;角色分为管理员、用户&#xff1b;集成商品…

分布式Erlang/OTP(学习笔记)(一)

Erlang分布式基础 假设你在机器A和机器B上各跑着一个Simple Cache应用的实例。要是在机器A的缓存上插人一个键/值对之后&#xff0c;从机器B上也可以访问&#xff0c;那可就好了。显然&#xff0c;要达到这个目的&#xff0c;机器A必须以某种方式将相关信息告知给机器B。传递该…

macOS向ntfs格式的移动硬盘写数据

最近想把日常拍摄的照片从SD存储卡中转存到闲置的移动硬盘中&#xff0c;但是转存的时候发现&#xff0c;mac只能读我硬盘里的东西&#xff0c;无法将数据写入到移动硬盘中&#xff0c;也无法删除移动硬盘的数据。后来在网上查了许久资料&#xff0c;终于可实现mac对移动硬盘写…