【数据结构】队列的应用(详解)

目录

0  引言

1  打印机任务队列

2  广度优先搜索(BFS)

3  总结


0  引言

        队列(Queue)是一种先进先出(FIFO)的数据结构,它允许在尾部添加元素(入队操作),并从头部移除元素(出队操作)。队列在许多场景中都有应用,下面将给出一些常见的应用以及它们的C语言实现。

1  打印机任务队列

        在打印机任务队列中,多个打印任务被放入队列中,打印机按照任务进入队列的顺序进行打印。

        代码如下:

#include <stdio.h>  
#include <stdlib.h>  #define MAX_SIZE 100  typedef struct {  int data[MAX_SIZE];  int front, rear;  
} Queue;  void initQueue(Queue *q) {  q->front = q->rear = -1;  
}  int isFull(Queue *q) {  return q->rear == MAX_SIZE - 1;  
}  int isEmpty(Queue *q) {  return q->front == -1;  
}  void enqueue(Queue *q, int value) {  if (isFull(q)) {  printf("Queue is full\n");  return;  }  if (isEmpty(q)) q->front = 0;  q->rear++;  q->data[q->rear] = value;  
}  int dequeue(Queue *q) {  if (isEmpty(q)) {  printf("Queue is empty\n");  return -1;  }  int value = q->data[q->front];  if (q->front == q->rear) q->front = q->rear = -1;  else q->front++;  return value;  
}  int main() {  Queue q;  initQueue(&q);  enqueue(&q, 1);  enqueue(&q, 2);  enqueue(&q, 3);  printf("Dequeued: %d\n", dequeue(&q));  printf("Dequeued: %d\n", dequeue(&q));  return 0;  
}

2  广度优先搜索(BFS)

        在图或树的遍历中,队列被用于实现广度优先搜索。

        由于BFS的实现较长,这里仅给出队列在BFS中的关键应用部分:

        代码如下:

// 假设graph是一个邻接表,visited是一个标记数组  
Queue q;  
initQueue(&q);  
enqueue(&q, startNode); // 将起始节点入队  
visited[startNode] = 1;  while (!isEmpty(&q)) {  int currentNode = dequeue(&q);  // 访问当前节点  // ...  // 将当前节点的所有未访问邻居入队  for (int i = 0; i < graph[currentNode].size; i++) {  int neighbor = graph[currentNode].adj[i];  if (!visited[neighbor]) {  enqueue(&q, neighbor);  visited[neighbor] = 1;  }  }  
}

3  总结

        队列作为一种基础的数据结构,在多种场景下都有重要的应用。从简单的打印机任务队列到复杂的图遍历算法(如BFS),队列都发挥着关键作用。通过实现队列的基本操作(如入队、出队、判断是否为空或满),我们可以轻松地将队列用于各种实际问题中。在C语言中,我们可以使用数组或链表来实现队列,具体实现方式取决于具体需求(如是否需要动态调整队列大小)。

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

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

相关文章

三维地图Cesium,加载一个模型,模型沿着给定的一组经纬度路线移动

目录 实现效果 实现思路 功能点 选择移动路线 加载模型和移动路线 重新运行 指定位置(经纬度点)开始移动 视角切换 到站提示 运行 停止 联动接口 完整代码 html js逻辑 trainOperation.js sourceData.js gitee仓库项目代码 疑问解答 实现效果 三维地图Cesiu…

CopyOnWriteArrayList详解

目录 CopyOnWriteArrayList详解1、CopyOnWriteArrayList简介2、如何理解"写时复制"3、CopyOnWriteArrayList的继承体系4、CopyOnWriteArrayList的构造函数5、CopyOnWriteArrayList的使用示例6、CopyOnWriteArrayList 的 add方法7、CopyOnWriteArrayList弱一致性的体现…

LeetCode790多米诺和托米诺平铺

题目描述 有两种形状的瓷砖&#xff1a;一种是 2 x 1 的多米诺形&#xff0c;另一种是形如 “L” 的托米诺形。两种形状都可以旋转。给定整数 n &#xff0c;返回可以平铺 2 x n 的面板的方法的数量。返回对 109 7 取模 的值。平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺…

Android基础-binder机制

一、引言 在Android系统中&#xff0c;进程间的通信&#xff08;IPC&#xff09;是一个至关重要的概念。不同于传统操作系统中的进程间通信方式&#xff0c;如管道、消息队列、信号量、共享内存等&#xff0c;Android采用了独特的Binder机制来实现进程间的通信。Binder机制不仅…

Qt 读取excel文件

在Qt中&#xff0c;你可以使用QtXlsxWriter库来对Excel文件进行操作。QtXlsxWriter是一个开源库&#xff0c;用于在Qt应用程序中生成和编辑Excel文件。以下是如何使用QtXlsxWriter库在Qt中对Excel文件进行操作的步骤&#xff1a; 添加QtXlsxWriter库到你的Qt项目中。可以通过在…

先进封装技术的一些优缺点探讨

半导体封装技术是半导体制造过程中的关键环节&#xff0c;它不仅保护了芯片免受物理损伤&#xff0c;还提供了电气连接和散热功能。随着技术的发展&#xff0c;出现了多种先进的封装技术&#xff0c;每种技术都有其特定的应用场景和优缺点。 --> 1. 传统封装技术 【优点】&…

【SpringBoot + Vue 尚庭公寓实战】根据类型查询标签列表接口实现(五)

【SpringBoot Vue 尚庭公寓实战】根据类型查询标签列表接口实现&#xff08;五&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】根据类型查询标签列表接口实现&#xff08;五&#xff09;1、查看接口2、进行开发 1、查看接口 启动项目 访问&#xff1a;http://localho…

macOS优化工具CleanMyMac2024免费版电脑性能提升 存储空间释放 电脑维护 高效易用 延长电脑使用寿命

【CleanMyMac】是一款专为macOS系统设计的优化和清理软件&#xff0c;它的核心特性就是帮助我们提升电脑性能&#xff0c;释放存储空间。&#x1f680; CleanMyMac绿色免费版下载如下&#xff1a;记得保存哈&#xff0c;以防失效&#xff1a; https://pan.quark.cn/s/9b08114…

实战分析Java的异步编程,并通过CompletableFuture进行高效调优

一、写在开头 在我们一开始讲多线程的时候,提到过异步与同步的概念,这里面我们再回顾一下: 同步:调用方在调用某个方法后,等待被调用方返回结果;调用方在取得被调用方的返回值后,再继续运行。调用方顺序执行,同步等待被调用方的返回值,这就是阻塞式调用;异步:调用方…

HTML标签 label for 还是 htmlFor

文章目录 问题结论更多 问题 HTML标签&#xff1a; label 的属性 for 还是 htmlFor&#xff1f; MDN文档&#xff1a;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label 结论 for 和 htmlFor 都可以使用&#xff0c;都是对的。在部分情况中&#xff0c;只能…

【React】Redux与React - 环境准备

配套工具 在React中使用redux&#xff0c;官方要求安装俩个其他插件 - Redux Toolkit 和 react-redux 配置基础环境 使用 CRA 快速创建 React 项目 npx create-react-app react-redux安装配套工具 npm i reduxjs/toolkit react-redux启动项目 npm run start

计算机网络复习题

期末题库复习1 一. 单选题&#xff08;共32题&#xff0c;100分&#xff09; 1. (单选题) 在脉冲起始时刻&#xff0c;有无跳变来表示“0”和“1”&#xff0c;且在脉冲中间时刻始终发生跳变的编码是&#xff08; &#xff09;。 A.非归零码 B.曼彻斯特编码 C.归零码 D.差…

解决更新Android Studio后下载Gradle超时

随着Android Studio的更新&#xff0c;所需要的最低Gradle版本也在变化&#xff0c;这时候构建项目的时候就需要先下载所需的Gradle发行版。对于Gradle构建项目&#xff0c;我们已经知道项目使用的Gradle是在根项目的gradle/wrapper/gradle-wrapper.properties文件中定义的&…

物联网设计竞赛_8_Jetson Orin Nano安装pytorch与torchvision

我的新板子到了&#xff0c;型号是jetson orin Nano与之前的jetson nano稍有不同我发现库又得从新下载 我的pip3的版本是3.8.10&#xff0c;jetpack版本5.1.1&#xff0c;又得重新开始下载库&#x1f62d; 安装pytorch: 得科学上网&#xff1a; PyTorch for Jetson - Jetson …

【RAG入门教程03】Langchian框架-文档加载

Langchain 使用文档加载器从各种来源获取信息并准备处理。这些加载器充当数据连接器&#xff0c;获取信息并将其转换为 Langchain 可以理解的格式。 LangChain 中有几十个文档加载器&#xff0c;可以在这查看https://python.langchain.com/v0.2/docs/integrations/document_lo…

android 双屏异显-学习笔记

双屏异显 日常生活中,有时候会遇到 Android 设备连接两个屏幕进行显示的问题,比如酒店登记信息时,一个屏幕用于员工操作,一个屏幕显示相关信息供顾客查看。这里就涉及到 Android 的双屏异显的问题,实现Android 的双屏异显,Google 也提供了相应的 API方法 Presentation。…

链表实现例子

链表概述 链表是一种基础的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。这些链表的实现展示了如何添加、删除和搜索节点,以及如何显示链表中的所有节点。根据具体需求,可以选择适合的链表类型。单向链表:每个节点只包含指向下一个节点的指针。双…

小白都可以通过U盘重装系统,再也不用花50块钱去安装系统啦

下载Ventoy 软件 1、今天带着大家通过Ventoy 安装Windows 11 系统。 2、首先我们通过官网如下地址&#xff1a;https://www.ventoy.net/cn/&#xff0c;找到我们对应系统的Ventoy 软件安装包。 3、通过官网可以找到软件包的地址地址&#xff0c;如下图所示。 4、如下就是我下…

弘君资本股市资讯:突发!英伟达,被查!

4家科技巨擘一同被查&#xff01; 科技巨擘们&#xff0c;正迎来反独占风暴。据美媒报道&#xff0c;美国将对英伟达、微软、OpenAI翻开反独占查询&#xff0c;这标志着监管部门对人工智能工作的查看力度越来越大。 与此一同&#xff0c;苹果也面对新费事。6月6日&#xff0c…

iOS开发-锚点

在iOS开发的面试中&#xff0c;锚点&#xff08;Anchor Point&#xff09;是一个可能涉及的高级主题&#xff0c;尤其是在讨论视图布局、动画和图层&#xff08;CALayer&#xff09;相关的内容时。以下是一些关于锚点的面试题&#xff0c;涵盖了基础概念、实际应用以及可能的陷…