队列——Acwing.829模拟队列

队列

定义

队列是一种特殊的线性表,遵循先进先出(First In First Out,FIFO)的原则。可以进行入队(在队尾添加元素)和出队(从队首移除元素)操作。

运用情况

  1. 任务调度:安排任务按照顺序执行。
  2. 排队系统:如银行排队、打印任务排队等。
  3. 广度优先搜索:用于保存待扩展的节点。
  4. 多线程中的任务队列。
  5. 网络通信中的数据包队列。

注意事项

  1. 要注意队列的容量限制,避免溢出。
  2. 操作队列时要确保队首和队尾指针的正确性。
  3. 考虑多线程环境下的同步问题,防止数据竞争。

解题思路

  1. 明确问题是否适合用队列来解决,通常涉及顺序处理、排队等场景。
  2. 创建队列对象并进行初始化。
  3. 按照 FIFO 原则进行入队和出队操作。
  4. 在处理过程中注意边界情况和异常情况。
  5. 根据具体需求,合理利用队列的特性来实现算法逻辑。

例如,在广度优先搜索中,先将起始节点入队,然后不断取出队首节点并扩展,将新节点入队,如此循环直到找到目标或遍历完所有可能。

Acwing.829模拟队列

题目描述

829. 模拟队列 - AcWing题库

运行代码

#include <iostream>  
#include <deque>  
#include <string>  using namespace std;  deque<int> q; // 队列  void push(int x) {  q.push_back(x); // 在队尾插入元素  
}  void pop() {  if (!q.empty()) {  q.pop_front(); // 从队头弹出元素  }  
}  void emptyOperation() {  if (q.empty()) {  cout << "YES" << endl;  } else {  cout << "NO" << endl;  }  
}  void queryOperation() {  if (!q.empty()) {  cout << q.front() << endl; // 查询队头元素  }  
}  int main() {  int M;  cin >> M;  while (M--) {  string op;  cin >> op;  if (op == "push") {  int x;  cin >> x;  push(x);  } else if (op == "pop") {  pop();  } else if (op == "empty") {  emptyOperation();  } else if (op == "query") {  queryOperation();  }  }  return 0;  
}

代码思路

  1. 定义队列:使用C++标准库中的std::deque(双端队列)来存储队列的元素。std::deque提供了在队列两端进行高效插入和删除操作的能力,因此非常适合实现队列。

  2. 定义操作函数

    • push(int x):向队列的尾部插入一个元素x。这是通过调用dequepush_back成员函数实现的。
    • pop():从队列的头部删除一个元素。这是通过调用dequepop_front成员函数实现的。这里假设操作总是合法的,所以没有检查队列是否为空。
    • emptyOperation():检查队列是否为空,并输出相应的结果。如果队列为空,输出"YES",否则输出"NO"。
    • queryOperation():查询队列的头部元素并输出。如果队列不为空,输出头部元素的值。
  3. 主函数处理

    • 读取操作次数M
    • 使用循环处理M个操作。
    • 对于每个操作,首先读取操作类型(字符串)。
    • 根据操作类型调用相应的操作函数。对于push操作,还需要读取要插入的元素值。
  4. 错误处理:在这个实现中,没有显式的错误处理,因为题目描述保证所有操作都是合法的。但在实际应用中,你可能需要添加错误处理来确保输入的有效性。

  5. 输出:根据操作类型,emptyOperationqueryOperation函数会输出相应的结果。

改进思路

  1. 减少不必要的函数调用:在pushpop操作中,由于我们知道std::deque已经提供了高效的push_backpop_front成员函数,我们可以直接在main函数中调用这些成员函数,而不是通过额外的函数来封装它们。

  2. 避免重复代码:在emptyOperationqueryOperation中,我们都在检查队列是否为空。为了避免重复,我们可以将检查队列是否为空的逻辑放在一个单独的函数中。

  3. 输入校验:虽然题目保证输入是合法的,但在实际情况下,我们可能想要添加一些输入校验来确保代码的健壮性。

改进代码

#include <iostream>  
#include <deque>  
#include <string>  using namespace std;  deque<int> q; // 队列  bool isEmpty() {  return q.empty();  
}  void processCommands(int M) {  for (int i = 0; i < M; ++i) {  string op;  cin >> op;  if (op == "push") {  int x;  cin >> x;  q.push_back(x); // 直接在main函数中调用push_back  } else if (op == "pop") {  if (!isEmpty()) { // 检查队列是否为空  q.pop_front(); // 直接在main函数中调用pop_front  }  } else if (op == "empty") {  cout << (isEmpty() ? "YES" : "NO") << endl;  } else if (op == "query") {  if (!isEmpty()) { // 检查队列是否为空  cout << q.front() << endl; // 查询队头元素  }  }  }  
}  int main() {  int M;  cin >> M;  processCommands(M);  return 0;  
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ES6+Vue

ES6Vue ES6语法 ​ VUE基于是ES6的&#xff0c;所以在使用Vue之前我们需要先了解一下ES6的语法。 1.什么是ECMAScript6 ECMAScript是浏览器脚本语言的规范&#xff0c;基于javascript来制定的。为什么会出现这个规范呢&#xff1f; 1.1.JS发展史 1995年&#xff0c;网景工…

大模型赛道有前景吗?

前言 随着人工智能技术的飞速发展&#xff0c;大模型作为新一代AI技术的核心驱动力&#xff0c;正在全球范围内掀起一场科技革命。在这个浪潮中&#xff0c;大模型赛道以其巨大的发展潜力、广泛的应用前景&#xff0c;成为了众多企业和投资者关注的焦点。本文将从多个角度探讨…

【STM32进阶笔记】GPIO端口

前段时间由于其他原因&#xff0c;专栏暂停更新了较长一段时间&#xff0c;现在恢复更新&#xff0c;争取继续为大家创造有价值的内容&#xff0c;期待大家的订阅关注&#xff0c;欢迎互相学习交流。 在STM32速成笔记系列专栏中其实已经对GPIO的一些必要知识进行了介绍&#xf…

tvm实战踩坑

今天玩了一下tvm的安装 我要安装v0.14.0的版本 所以按照官网的方法 https://tvm.apache.org/docs/install/from_source.html#python-package-installation git clone --recursive https://github.com/apache/tvm tvmgit checkout v0.14.0recursive是很重要的 这一步可以替换成…

数栈xAI:轻量化、专业化、模块化,四大功能革新 SQL 开发体验

在这个数据如潮的时代&#xff0c;SQL 已远远超越了简单的查询语言范畴&#xff0c;它已成为数据分析和决策制定的基石&#xff0c;成为撬动企业智慧决策的关键杠杆。SQL 的编写和执行效率直接关系到数据处理的速度和分析结果的深度&#xff0c;对企业洞察市场动态、优化业务流…

[Shell编程学习路线]——探讨Shell中变量的作用范围(export)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月14日10点14分 &#x1f004;️文章质量&#xff1a;95分 文章目录 ————前言———— 定义变量&#xff1a; 输出变…

SpringBoot3 整合 Mybatis 完整版

本文记录一下完整的 SpringBoot3 整合 Mybatis 的步骤。 只要按照本步骤来操作&#xff0c;整合完成后就可以正常使用。1. 添加数据库驱动依赖 以 MySQL 为例。 当不指定 依赖版本的时候&#xff0c;会 由 springboot 自动管理。 <dependency><groupId>com.mysql&l…

第2章 Rust初体验7/8:错误处理时不关心具体错误类型的下划线:提高代码可读性:猜骰子冷热游戏

讲动人的故事,写懂人的代码 2.6.6 用as进行类型转换:显式而简洁的语法 贾克强:“大家在查看Rust代码时,可能会注意到这一句。在这里,如果我们不使用as i32,编译器会报错,因为它在u32中找不到abs()方法。这是因为prev和sum_of_two_dice都是u32类型,u32类型并不支持abs(…

燃气守护神:燃气管网安全运行监测解决方案

在这个智能科技日新月异的时代&#xff0c;燃气安全却时有发生&#xff0c;严重危害人们的生命财产安全&#xff0c;因此旭华智能根据相关政策要求并结合自身优势&#xff0c;打造了一套燃气管网安全运行监测解决方案&#xff0c;他犹如一位“燃气守护神”&#xff0c;悄然守护…

[深度学习]基于C++和onnxruntime部署yolov10的onnx模型

基于C和ONNX Runtime部署YOLOv10的ONNX模型&#xff0c;可以遵循以下步骤&#xff1a; 准备环境&#xff1a;首先&#xff0c;确保已经下载后指定版本opencv和onnruntime的C库。 模型转换&#xff1a;按照官方源码&#xff1a;https://github.com/THU-MIG/yolov10 安装好yolov…

【linux网络(三)】HTTP协议详解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. 序列化和…

新面貌、新功能、新内容!禅道官网改版升级,全面提升用户体验

为了给用户更好的体验&#xff0c;禅道团队于23年6月与艾体验团队达成合作&#xff0c;正式启动了禅道官网改版的项目&#xff0c;历经一年的努力&#xff0c;2024年6月7日&#xff0c;禅道新官网顺利完成改版升级&#xff0c;正式上线与大家见面啦&#xff01; 此次改版上线的…

LeetCode 2813.子序列最大优雅度

给你一个长度为 n 的二维整数数组 items 和一个整数 k 。 items[i] [profiti, categoryi]&#xff0c;其中 profiti 和 categoryi 分别表示第 i 个项目的利润和类别。 现定义 items 的 子序列 的 优雅度 可以用 total_profit distinct_categories^2 计算&#xff0c;其中 t…

腾讯云EdgeOne对比普通CDN的分别

EdgeOne架构图 普通CDN架构图 ​​​​​​​ 腾讯云EdgeOne对比普通CDN的不同点 服务范围和集成度 腾讯云EdgeOne是一体化的综合平台&#xff0c;不仅提供内容分发功能&#xff0c;还包括安全防护、性能优化和边缘计算等服务。EdgeOne提供了DDoS防护、WAF&#xff08;Web应…

Tailwind CSS 响应式设计实战指南

title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计&#xff0c;涵盖博客、电商网站及企业官网的布局实例&#xff0c;包括头部导航、内容区域、侧边栏、页脚…

Java-多线程

概念 进程&#xff1a;程序的基本执行实体 线程&#xff1a;操作系统能够进行运算调度的最小单位&#xff0c;被包含在进程之中&#xff0c;是进程的实际运作单位 并发&#xff1a;同一时刻&#xff0c;多个指令在单个CPU上交替执行。 并行&#xff1a;同一时刻&#xff0c;多…

阿里云 Ubuntu 22.04.4 LTS 安装postfix+dovecot 搭建邮件服务器

一 安装 1安装postfix sudo apt-get install postfix #如果没有弹出配置界面&#xff0c;运行 dpkg-reconfigure postfix #sudo vim /etc/postfix/main.cf smtpd_banner $myhostname ESMTP $mail_name (Ubuntu) biff no append_dot_mydomain no readme_directory no co…

求和路径00

题目链接 求和路径 题目描述 注意点 节点总数 < 10000节点的值可能是正数或负数路径不一定非得从二叉树的根节点或叶节点开始或结束&#xff0c;但是其方向必须向下(只能从父节点指向子节点方向) 解答思路 因为要求树的路径和&#xff0c;所以初始想到的是深度优先遍历…

杏仁核亚区在情绪处理中的特化

摘要 杏仁核对人类的恐惧情绪处理至关重要。然而&#xff0c;目前的研究未能揭示其特异性&#xff0c;有证据表明杏仁核也会对其他情绪做出反应。鉴于情绪功能对日常生活和心理健康的重要性&#xff0c;我们需要更加细致地了解杏仁核在情绪加工中的作用&#xff0c;特别是与恐…

LLM之RAG实战(四十)| 使用LangChain SQL Agent和MySQL搭建多层RAG ChatBot

在传统的意义上&#xff0c;RAG 主要是从文档中检索用户想要的数据&#xff0c;从而提高大模型的能力&#xff0c;减少幻觉问题。今天&#xff0c;我们从另一个维度介绍RAG&#xff0c;RAG不从文档中获取数据&#xff0c;而是从MySQL数据库检索数据。我们可以使用LangChain SQL…