当前位置: 首页 > news >正文

队列(Queue):先进先出(FIFO)的数据结构

队列是一种基本的数据结构,用于在计算机科学和编程中管理数据的存储和访问。队列遵循先进先出(First In, First Out,FIFO)原则,即最早入队的元素首先出队。这种数据结构模拟了物理世界中的队列,如排队等待服务的人。

在本篇中,我将详细介绍队列的概念、用途、实现以及如何在编程中使用队列。

如有问题的地方请指出!!!

队列的概念

队列是一个线性数据结构,具有以下关键特点:

  1. 先进先出(FIFO)原则: 最早入队的元素将首先出队。
  2. 两个主要操作: 队列支持两个基本操作,即入队(Enqueue)和出队(Dequeue)。
  3. 队首: 位于队列前端的元素是最早加入队列的元素,是唯一一个可以访问的元素。
  4. 队尾: 位于队列尾端的元素是最新加入队列的元素。
  5. 限制大小: 队列可以有固定或动态大小,通常有容量限制。

队列的用途

队列在计算机科学中有广泛的应用,包括但不限于以下用途:

  1. 任务调度: 操作系统使用队列来管理进程的调度和执行顺序。
  2. 数据缓冲: 队列用于缓存数据,以平衡生产者和消费者之间的速度差异。
  3. 广度优先搜索: 在图算法中,队列用于实现广度优先搜索(BFS)算法。
  4. 打印队列: 打印作业排队以等待打印机执行。
  5. 消息传递: 队列用于消息传递系统,如消息队列(Message Queue)。
  6. Web请求队列: Web服务器使用队列来处理传入请求,以平衡服务器负载。

队列的实现

队列可以通过数组或链表实现。每种实现方式都有其优点和缺点。

  1. 数组实现: 使用数组实现的队列通常具有固定大小,通常更快,因为数组的元素在内存中是连续存储的。然而,固定大小的数组队列可能会导致队列溢出。
  2. 链表实现: 使用链表实现的队列没有固定大小限制,因此更灵活,但在访问队列中的元素时需要遍历链表,性能略低于数组实现。

以下是用Go语言实现的简单队列的示例,使用链表实现:

package mainimport ("fmt"
)type Node struct {data intnext *Node
}type Queue struct {front *Noderear  *Node
}func (q *Queue) Enqueue(item int) {newNode := &Node{data: item, next: nil}if q.front == nil {q.front = newNodeq.rear = newNode} else {q.rear.next = newNodeq.rear = newNode}
}func (q *Queue) Dequeue() int {if q.front == nil {panic("Queue is empty")}item := q.front.dataq.front = q.front.nextreturn item
}func main() {queue := Queue{}queue.Enqueue(1)queue.Enqueue(2)queue.Enqueue(3)fmt.Println(queue.Dequeue()) // 输出 1fmt.Println(queue.Dequeue()) // 输出 2
}

相关文章:

队列(Queue):先进先出(FIFO)的数据结构

队列是一种基本的数据结构,用于在计算机科学和编程中管理数据的存储和访问。队列遵循先进先出(First In, First Out,FIFO)原则,即最早入队的元素首先出队。这种数据结构模拟了物理世界中的队列,如排队等待服…...

吃透 Spring 系列—AOP部分

目录 ◆ AOP 简介 - AOP的概念 - AOP思想的实现方案 - 模拟AOP的基础代码 - AOP相关概念 ◆ 基于xml配置的AOP - xml方式AOP快速入门 - xml方式AOP配置详解 - xml方式AOP原理剖析 ◆ 基于注解配置的AOP - 注解方式AOP基本使用 - 注解方式AOP配置详解 - 注解…...

redis 问题解决 2

1.4 数据存储 1、Redis 的数据过期策略是什么? Redis的数据过期策略包括两种机制:被动删除和主动删除。 被动删除: 当某个键被访问时,如果发现这个键已经过期,Redis会立即删除这个键。这意味着如果一个过期的键从未被访问,它就不会被自动删除。这是一种惰性删除策略。主…...

Spring Boot 校验用户上传的图片文件

图片上传是现代应用中非常常见的一种功能,也是风险比较高的一个地方。恶意用户可能会上传一些病毒、木马。这些东西不仅严重威胁服务器的安全还浪费了带宽,磁盘等资源。所以,在图片上传的接口中,一定要对用户上传的文件进行严格的…...

【springboot配置项动态刷新】与【yaml文件转换为java对象】

文章目录 一,序言二,准备工作1. pom.xml引入组件2. 配置文件示例 三,自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四,yaml文件转换为java对象1. 无法使…...

JS移动端触屏事件

在我们PC端中有许多的事件,那我们在移动端有没有事件呢?让我为大家介绍一下移动端常用的事件,触屏事件 触屏事件 touch (也称触摸事件),Android 和IOS 都有 touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一…...

C语言——打印1000年到2000年之间的闰年

闰年&#xff1a; 1、能被4整除不能被100整除 2、能被400整除 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int year;for(year 1000; year < 2000; year){if((year%4 0) && (year%100!0) || (year%400 0)){printf("%d ",ye…...

【Linux】【驱动】设备树下的paltform总线

【Linux】【驱动】设备树下的paltform总线 1. 驱动程序的完整代码2. 使用到的相关函数3 使用到的指令3.2 设备上使用的指令 1. 驱动程序的完整代码 主要是展示了通过总线上挂载的方式来实现相关的数据读取 实质上就是几个of函数的调用。 /** Author: topeet* Description: 设…...

洛谷 NOIP 2023 模拟赛-汪了个汪-题解

简要题意 棋盘上有 n n n 行&#xff0c;第 i i i 行有 i i i 个格子。你要在格子填 1 ∼ n 1\sim n 1∼n&#xff0c;满足&#xff1a; 每行第一个数互不相同所有在行上相邻的两个数所组成的无序对互不相同每行的数互不相同 n ≤ 4000 n\le4000 n≤4000 题解 容易发现…...

洛谷 NOIP 2023 模拟赛 P9836 种树

洛谷 NOIP 2023 模拟赛 P9836 种树 文章目录 洛谷 NOIP 2023 模拟赛 P9836 种树题目大意思路code 题目大意 路边有 n n n 棵树&#xff0c;每棵树的 高度 均为正整数&#xff0c;记作 p 1 , p 2 … p n p_1, p_2 \dots p_n p1​,p2​…pn​。 定义一棵树的 宽度 为它高度的…...

链表经典OJ题(链表回文结构,链表带环,链表的深拷贝)

目录 前言 1.反转一个单链表。 2. 给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。 3.链表的回文结构。 4.链表带环问题&#xff08;*****&#xff09; 4.1是否带环 4.2 入环的节点 5.随机链表的复制&#xff08;链表的深拷贝&#xff09; 前言…...

AD教程 (十三)常见CHIP封装的创建

AD教程 &#xff08;十三&#xff09;常见CHIP&#xff08;贴片&#xff09;封装的创建 PCB封装是电子设计图纸和实物之间的映射体&#xff0c;具有精准数据的要求&#xff0c;在实际设计中需要通过规格书获取创建封装的数据参数。 PCB封装和实物的大小一致。PCB封装是承载实物…...

从0到1实现一个前端监控系统(附源码)

目录 一、从0开始 二、上报数据方法 三、上报时机 四、性能数据收集上报 收集上报FP 收集上报FCP 收集上报LCP 收集上报DOMContentLoaded 收集上报onload数据 收集上报资源加载时间 收集上报接口请求时间 五、错误数据收集上报 收集上报资源加载错误 收集上报js错…...

第7章-使用统计方法进行变量有效性测试-7.2-方差分析

目录 7.2 方差分析 7.2.1 单因素方差分析 组内变异 组间变异 总变异 随机误差...

【MongoDB】索引 – 文本索引(用权重控制搜索结果)

一、准备工作 这里准备一些数据 db.books.drop();db.books.insert({_id: 1, name: "Java", alias: "java 入门", description: "入门图书" }); db.books.insert({_id: 2, name: "C", alias: "c", description: "C 入…...

Git 入门使用

一、Git 入门 1.1 Git简介 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。Git是由Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 Git是目前世界上最先进的分布式版本控制系统&#xff0c;没有之一&a…...

如何写好接口自动化测试脚本

谈到接口测试&#xff0c;大家关注更多的是哪个工具更优秀&#xff0c;更好用。但是很少人关注到接口测试用例的设计问题&#xff0c;也很少人会去写接口用例&#xff0c;都代码化了嘛&#xff0c;还写什么用例&#xff0c;是吧&#xff1f; 这样真的对么&#xff1f;我们是不…...

openEuler编译安装nmon性能监控工具及可视化分析工具

ln 介绍 nmon&#xff08;short for Nigel’s Monitor&#xff09;是一个性能分析工具&#xff0c;由蓝色巨人IBM开发&#xff0c;最早用于自家操作系统UNIX&#xff0c;AIX &#xff08;Advanced Interactive eXecutive&#xff09;。现在也能用在Linux上。它可以显示系统的…...

96 前缀树Trie

前缀树 题解1 STL题解2 参考官方 Trie&#xff08;发音类似 “try”&#xff09;或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&#xff0c;例如自动补完和拼写检查。 请你实现 Trie 类&#xff1a; …...

“第六十六天”

这个我记得是有更优解的&#xff0c;不过还是明天发吧&#xff0c;明天想一想&#xff0c;看看能不能想起来 #include<string.h> int main() {char a[201] { 0 };char b[201] { 0 };scanf("%s %s", a, b);int na strlen(a);int nb strlen(b);int i 0, j …...

突破硬件限制的游戏自由:Sunshine串流方案让低配设备玩转3A大作

突破硬件限制的游戏自由&#xff1a;Sunshine串流方案让低配设备玩转3A大作 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的自托管游戏串流服务器&#xff0c…...

Braft Editor原子组件深度解析:Audio、Video、Embed等多媒体组件实现原理

Braft Editor原子组件深度解析&#xff1a;Audio、Video、Embed等多媒体组件实现原理 【免费下载链接】braft-editor 美观易用的React富文本编辑器&#xff0c;基于draft-js开发 项目地址: https://gitcode.com/gh_mirrors/br/braft-editor Braft Editor是一款基于Draft…...

EPLAN笔记

一般使用:1.端子排报表&#xff1a;每个端子前后要放置线线号,原则上端子前后都要放置设备(如:电机、按钮、开关、端子)&#xff0c;端子前后中断点、描述点、节点等端子EPLAN端子数据里是识别不了线号的。在自建端子排中&#xff0c;端子前或后最少有一边放置了设备&#xff0…...

算力 GPU 驱动实战总结:SVM Eviction Fence 设计思想与实现细节

1. 问题背景 1.1 STALE _mapcount 问题 在 VRAM 超量分配&#xff08;overcommit&#xff09;场景下&#xff0c;当 GPU VRAM 被占满时&#xff0c;TTM 内存管理器需要驱逐&#xff08;evict&#xff09;旧的 BO 来为新的分配腾出空间。 问题&#xff1a;对于 SVM&#xff08;S…...

Java微服务容器化新范式:GraalVM静态镜像+Seccomp白名单+gVisor沙箱(三重隔离方案已通过CNCF安全审计)

第一章&#xff1a;Java微服务容器化新范式&#xff1a;GraalVM静态镜像Seccomp白名单gVisor沙箱&#xff08;三重隔离方案已通过CNCF安全审计&#xff09;现代Java微服务在云原生环境中正面临启动慢、内存高、攻击面广三大瓶颈。本章介绍的三重隔离方案&#xff0c;将GraalVM …...

打字不如说话,说话不如截图——AI 代码助手的多模态输入实践不

整体排查思路 我们的目标是验证以下三个环节是否正常&#xff1a; 登录成功时&#xff1a;服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端&#xff1a;浏览器是否成功接收并存储了该Cookie。 后续请求&#xff1a;浏览器在执行查询等操作…...

Tsung动态变量高级用法:从数据提取到循环测试的完整教程

Tsung动态变量高级用法&#xff1a;从数据提取到循环测试的完整教程 【免费下载链接】tsung Tsung is a high-performance benchmark framework for various protocols including HTTP, XMPP, LDAP, etc. 项目地址: https://gitcode.com/gh_mirrors/ts/tsung Tsung是一款…...

React - 组件优化、children props 与 render props、错误边界

一、组件优化 1、问题引入 &#xff08;1&#xff09;基本介绍只要执行 setState&#xff0c;即使不改变状态数据, 组件也会重新 render只要当前组件重新 render&#xff0c;就会自动重新 render 子组件&#xff0c;纵使子组件没有用到父组件的任何数据只要父组件更新&#xff…...

BongoCat桌宠自定义开发全面解析:从设计到社区贡献的实战指南

BongoCat桌宠自定义开发全面解析&#xff1a;从设计到社区贡献的实战指南 【免费下载链接】BongoCat &#x1f431; 跨平台互动桌宠 BongoCat&#xff0c;为桌面增添乐趣&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 开源项目设计理念与架构解…...

【AI CTO视角】算力不是堆资源,而是一场精细化工程

经常和行业内的朋友交流&#xff0c;发现一个普遍现象&#xff1a;一提到AI算力建设&#xff0c;很多人的第一反应还是堆卡、扩集群、上规模&#xff0c;仿佛GPU数量上去了&#xff0c;算力竞争力自然就来了。 但从实际落地与商业化视角看&#xff0c;尤其在大模型规模化服务、…...