C++ 用数组模拟队列
在C++中,使用数组模拟队列通常涉及到两个主要的操作:入队(enqueue)和出队(dequeue)。由于数组是一个固定大小的数据结构,当使用数组模拟队列时,需要手动管理队列的头部和尾部位置。以下是使用数组模拟队列的一种简单实现方法:
#include <iostream>
#include <vector>class ArrayQueue {
private:std::vector<int> data; // 使用vector来动态管理数组的大小int front; // 队列头部的索引int rear; // 队列尾部的索引int count; // 队列中元素的数量public:ArrayQueue() : front(0), rear(-1), count(0) {}// 入队操作bool enqueue(int value) {if (count == data.size()) {// 如果队列满了,需要扩容if (data.size() == 0 || rear == 0) {data.resize(data.size() * 2);} else {// 将队列元素向前移动,重新利用数组空间for (int i = front; i != rear + 1; ++i) {data[i - front] = data[i];}rear -= front;front = 0;}}data[++rear] = value;++count;return true;}// 出队操作bool dequeue() {if (count == 0) {std::cout << "Queue is empty" << std::endl;return false;}if (front == rear) {// 队列为空,重置front和rearfront = rear = 0;} else {++front;}--count;return true;}// 查看队首元素int frontValue() const {if (count == 0) {throw std::runtime_error("Queue is empty");}return data[front];}// 检查队列是否为空bool isEmpty() const {return count == 0;}// 获取队列的大小int size() const {return count;}
};int main() {ArrayQueue queue;queue.enqueue(1);queue.enqueue(2);queue.enqueue(3);std::cout << "Front value: " << queue.frontValue() << std::endl; // 输出队首元素queue.dequeue();std::cout << "Front value after dequeue: " << queue.frontValue() << std::endl;std::cout << "Queue size: " << queue.size() << std::endl; // 输出队列大小while (!queue.isEmpty()) {std::cout << "Dequeued: " << queue.frontValue() << std::endl;queue.dequeue();}return 0;
}
这个例子中,我们使用了 std::vector 来避免固定大小数组带来的限制,使得队列可以根据需要自动扩容。front 和 rear 分别指向队列的头部和尾部,count 记录队列中的元素数量。
请注意,当数组填满时,我们可以选择扩容数组或者将数组中的元素向前移动,以重新利用数组空间。在这个例子中,我们选择了后者,这样可以避免频繁的内存分配和复制操作。但是,这种方法要求数组的初始位置不为0,或者在移动元素后更新 front 和 rear 的值。
相关文章:
C++ 用数组模拟队列
在C中,使用数组模拟队列通常涉及到两个主要的操作:入队(enqueue)和出队(dequeue)。由于数组是一个固定大小的数据结构,当使用数组模拟队列时,需要手动管理队列的头部和尾部位置。以下…...
每日一题34:数据分组之查找每个员工花费的总时间
一、每日一题 表: Employees ------------------- | Column Name | Type | ------------------- | emp_id | int | | event_day | date | | in_time | int | | out_time | int | ------------------- 在 SQL 中,(emp_id, event_day, in_time) 是…...
语言模型解构——Tokenizer
1. 认识Tokenizer 1.1 为什么要有tokenizer? 计算机是无法理解人类语言的,它只会进行0和1的二进制计算。但是呢,大语言模型就是通过二进制计算,让你感觉计算机理解了人类语言。 举个例子:单1,双2&#x…...
前端经验:导出表格为excel并设置样式
应用场景 将网页上的table标签内容导出为excel,并且导出的excel携带样式,比如字色、背景色、对齐等等 实施步骤 必备引入包 npm install xlsx-js-style步骤1:准备好table table可以是已经存在与页面中的,也可以动态创建。 行…...
UFS协议—新手快速入门(二)【5-6】
目录 五、UFS协议栈 六、UFS技术演进与详解 1、UFS应用层 设备管理器 任务管理器 2、UFS传输层 3、UFS互联层 UFS协议—新手快速入门(一)【1-4】 五、UFS协议栈 UFS(Universal Flash Storage)协议是针对固态存储设备&…...
手机建站介绍
随着科技的不断进步和移动互联网的普及,手机应用已经成为人们生活中最不可或缺的一部分。而手机建站作为一种新兴技术,在这一领域也有着广泛的应用。本文将为大家介绍手机建站的概念、优势和应用。 什么是手机建站? 手机建站是指将传统的网络…...
windows11 安装cnpm 报错 Error: EPERM: operation not permitted 没权限
全部试过: 您遇到的错误是EPERM: operation not permitted,这意味着npm在尝试重命名文件或目录时缺少必要的权限。这通常与操作系统的权限设置有关。为了解决这个问题,您可以尝试以下几个步骤: 以管理员身份运行命令行࿱…...
SQL 如何获取A列相同但是B列不同的数据项
用户表里有两个字段:部门和职位。一个部门可能对应多个职位,多个部门也可能都有同一职位。比如: 部门 职位 财务 部长 财务 副部长 财务 会计 财务 职员 编辑 部长 编辑 副部长 编辑 主编 编辑 副主编 现在想通过筛选,获取职位名称…...
如何在QGIS中加载高清卫星影像?
我们在《如何在GlobalMapper中加载高清卫星影像》一文中,分享了在GlobalMapper中加载卫星影像的方法。 这里再为你分享如何在QGIS中加载高清卫星影像的方法,并可以在文末查看领取软件安装包和图源的方法。 如何加载高清图源? 要在QGIS中在…...
后端返回图片格式乱码
try {const response await request.get(checkCodeUrl.value,{responseType:"arraybuffer"});console.log("验证码请求成功:", response);checkCodeUrl.value data: image/jpeg;base64,${btoa(new Uint8Array(response).reduce((data, byte) > data …...
C++基础编程100题-025 OpenJudge-1.4-05 整数大小比较
更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0104/05/ 描述 输入两个整数,比较它们的大小。 输入 一行,包含两个整数x和y,中间用单个空格隔开。 0 < x < 2^32, -2^31 < y < 2^31。 输出 一个字符。 若x &…...
[office] 16种常见的COUNTIF函数公式设置 #笔记#职场发展
16种常见的COUNTIF函数公式设置 1、返回包含值12的单元格数量 COUNTIF(A:A,12) 2、返回包含负值的单元格数量 COUNTIF(A:A,"<0") 3、返回不等于0的单元格数量 COUNTIF(A:A,"<>0") 4、返回大于5的单元格数量 COUNTIF(A:A,">5"…...
spring boot2.7.x遇到问题
validation报错 高版本已移除了validation以来,需手动添加 <dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId> </dependency>mybatis报错 升级版本 <dependency>&…...
Webpack 开发快速入门
WebPack详细入门教程(一)之简介 Webpack详细入门教程(二)之安装配置 WebPack详细入门教程(三)之loader加载器 Webpack详细入门教程(四)之Source Maps调试 Webpack详细入门教程&#…...
AI时代的多维探索
随着人工智能(AI)技术的迅猛发展,我们的生活正在经历一场深刻的变革。从智能家居到自动驾驶,从医疗诊断到金融投资,AI技术正逐渐渗透到社会的各个角落。为了更全面地了解AI时代的发展趋势,我们将通过十个具…...
您的游戏端被攻击了怎么办,德迅云安全的应用加速来帮您
游戏行业DDoS攻击的主要原因是因为游戏产品生命周期偏短,而DDoS供给成本又不高,只要发起攻击,企业为确保游戏稳定运营而不得不快速做出让步,致使敲诈勒索的成功率相对更高。在遭受DDoS攻击后,游戏公司的日损失甚至多达…...
关于利用hashcat破解WiFi数据包的操作记录
准备数据包相关转换工具 ┌──(kali㉿kali)-[~/cap/3204] └─$ sudo apt-cache search hc | grep ^hc hcloud-cli - command-line interface for Hetzner Cloud hcxdumptool - Small tool to capture packets from wlan devices hcxkeys - Tools to generate plainmasterkey…...
伯克希尔·哈撒韦:“股神”的“登神长阶”
股价跳水大家见过不少,但一秒跌掉62万美元的你见过吗? 今天我们来聊聊“股市”巴菲特的公司——伯克希尔哈撒韦 最近,由于纽交所技术故障,伯克希尔哈撒韦A类股股价上演一秒归“零”,从超过62万美元跌成185.1美元&…...
f1c100s 荔枝派 系统移植
一。交叉编译环境配置 1.1下载交叉工具链:https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/ 1.2解压安装 在home目录下新建 工程目录:mkdir f1c100s_project 将windows下的gcc-linaro-7.2.1-2017.11-x86…...
EtherCAT 和 UDP 通讯的实时性 区别
EtherCAT 和 UDP 是两种不同的通信协议,它们在实时性方面有着本质的区别,主要体现在以下几个方面: 实时性设计目的: EtherCAT 是专为工业自动化设计的实时以太网协议,它通过独特的数据通信机制实现了极高的实时性能。E…...
万象视界灵坛代码实例:批量处理百张图像并导出CSV格式语义匹配报告
万象视界灵坛代码实例:批量处理百张图像并导出CSV格式语义匹配报告 1. 项目概述与核心价值 万象视界灵坛是一款基于OpenAI CLIP模型的高级多模态智能感知平台,它将复杂的图像语义分析转化为直观的交互体验。不同于传统视觉识别工具,该平台采…...
百考通:AI精准驱动数据分析,让数据价值高效落地
在数字化浪潮席卷各行各业的今天,数据已成为核心生产要素,但如何从海量数据中挖掘价值、辅助决策,始终是企业与个人面临的核心难题。传统数据分析流程繁琐、技术门槛高、周期漫长,让许多非专业人士望而却步。百考通(ht…...
状态机中的人物状态
一,人物惯性移动using System.Collections; using System.Collections.Generic; using UnityEngine;public class CharMove3 : MonoBehaviour {public Transform charTrans; //角色坐标public Vector3 currentVelocity; //当前速度public float maxSpeed; //最大速率…...
OpenClaw跨平台控制:Qwen3.5-9B管理多台电脑
OpenClaw跨平台控制:Qwen3.5-9B管理多台电脑 1. 为什么需要跨设备自动化管理 去年夏天,我同时处理三个项目时遇到了一个典型问题:每天需要在三台不同电脑上重复执行数据同步、日志收集和报告生成。手动操作不仅耗时,还经常遗漏步…...
SwartNinjaPIR:嵌入式高可靠PIR运动检测驱动库
1. SwartNinjaPIR 库概述:面向嵌入式系统的高可靠性 PIR 运动检测驱动设计SwartNinjaPIR 是一个专为 Arduino 及兼容平台(如 STM32、ESP32 等基于 Arduino Core 的 MCU)设计的轻量级、生产就绪型被动红外(Passive Infrared, PIR&a…...
seo网站制作如何选择合适的关键词
SEO网站制作如何选择合适的关键词 在当今互联网时代,一个成功的网站不仅需要精美的设计,还需要强大的搜索引擎优化(SEO)技术。其中,关键词选择是SEO策略中至关重要的一环。选择合适的关键词不仅能够提高网站在百度等搜…...
TM1620驱动数码管的8个常见坑点及解决方案(基于STM32实战)
TM1620驱动数码管的8个常见坑点及解决方案(基于STM32实战) 当你在STM32项目中使用TM1620驱动数码管时,可能会遇到各种令人头疼的问题。本文将深入探讨8个最常见的坑点,并提供经过实战验证的解决方案,帮助开发者快速定位…...
Android开发者必看:VirtualDisplay与mirrorDisplay的底层实现原理与性能优化
Android图形系统深度解析:VirtualDisplay与MirrorDisplay的底层架构与性能调优 在Android多屏交互与扩展显示场景中,VirtualDisplay和MirrorDisplay作为图形系统的核心组件,承担着虚拟显示设备创建与内容复制的关键功能。本文将深入SurfaceFl…...
PLC课程设计 - 基于智能立体4层停车库的设计
题目:PLC课程设计-基于智能立体4层停车库的设计 仿真软件博图18 资料包括:博图软件仿真流程图开题ppt课设报告参考 实现功能: 立体车库,有四层,可以实现对应位置的存车及取车功能 当存车的时候,首先需要判断…...
2026最权威的五大AI辅助写作神器解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 随着人工智能技术发展得格外迅猛,学术领域对于AI相关论文的需求增长得越来越快。…...
