队列:C++实现

引言:

        在C++中实现队列是一种常见的数据结构操作。队列是一种先进先出(FIFO)的数据结构,类似于排队买票或者排队等待服务的场景。在本文中,我们将使用C++语言来实现一个简单的队列数据结构。

技术实现:

        首先,我们定义了一个常量QueueSize,用于表示队列的最大容量。然后,我们使用模板类Queue来定义队列的操作。模板类允许我们在实例化队列时指定元素的类型。

在Queue类中,我们定义了以下成员函数:

  • 构造函数Queue()用于初始化队列。
  • 析构函数~Queue()用于释放队列的资源。
  • enQueue(Element x)用于将元素x入队。
  • deQueue()用于将队首元素出队。
  • getQueue()用于获取队首元素。
  • empty()用于判断队列是否为空。

此外,我们还定义了一个私有成员变量data来存储队列元素,以及front和rear来表示队首和队尾的位置。

#include<iostream>
#include<assert.h>
const int QueueSize = 10;template<typename Element>
class Queue
{
public:Queue();~Queue();void enQueue(Element x);Element deQueue();Element getQueue();bool empty();
private:Element data[QueueSize];int front, rear;
};

        接下来,我们将逐步实现这些成员函数。在构造函数中,我们将front和rear初始化为0,表示队列为空。在析构函数中,我们不需要做太多工作,因为C++会自动释放数组的内存。

        在enQueue函数中,我们首先判断队列是否已满,如果满了则抛出异常。然后将元素x放入rear位置,并将rear后移一位。在deQueue函数中,我们首先判断队列是否为空,如果为空则抛出异常。然后将front后移一位,并返回队首元素。在getQueue函数中,我们直接返回队首元素。在empty函数中,我们判断队列是否为空并返回相应的结果。

template<typename Element>
Queue<Element>::Queue()
{front = rear = -1;
}template<typename Element>
Queue<Element>::~Queue(){}template<typename Element>
void Queue<Element>::enQueue(Element x)
{assert((rear + 1) % QueueSize != front);rear = (rear + 1) % QueueSize;data[rear] = x;
}template<typename Element>
Element Queue<Element>::deQueue()
{assert(rear != front);front = (front + 1) % QueueSize;return data[front];
}template<typename Element>
Element Queue<Element>::getQueue()
{assert(rear != front);return data[front];
}template<typename Element>
bool Queue<Element>::empty()
{return rear==front;
}

最后,我们可以使用这个Queue类来进行队列操作。例如:

Queue<int> q;
q.enQueue(1);
q.enQueue(2);
std::cout << q.getQueue() << std::endl; // 输出1
q.deQueue();
std::cout << q.getQueue() << std::endl; // 输出2

结尾: 

         通过这样的实现,我们可以方便地使用C++来操作队列,实现先进先出的数据结构。这种实现方式可以应用于各种场景,如操作系统调度、网络数据传输等。希望本文对你理解队列的实现有所帮助。

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

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

相关文章

道可云元宇宙每日资讯|第四届元宇宙与人工智能产业生态大会在朝阳区举行

道可云元宇宙每日简报&#xff08;2023年11月22日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 第四届元宇宙与人工智能产业生态大会在朝阳区举行 近日&#xff0c;第四届元宇宙与人工智能产业生态大会在朝阳区举行。大会由北京市朝阳区政府主办。会上&#xff…

webpack项目 index.html 根据不同的变量引入不同的js

项目 webpack搭建 问题&#xff1a;在入口文件index.html中根据不同的变量引入不同的js 使用插件HtmlWebpackPlugin HtmlWebpackPlugin 项目里用来生成静态文件的 这个插件每个项目基本都要用到的&#xff0c;只要全局搜一下位置 根据配置文件的指令找到执行的文件&#xff0…

海外应用速度访问慢?试试这个技术解决方案

在数字化转型的时代&#xff0c;企业需要高效、稳定、安全的网络连接来支撑全球化业务的拓展。然而&#xff0c;在进行海外应用访问时&#xff0c;经常会遇到访问速度慢的问题&#xff0c;因为跨国界的网络通信往往存在延迟和带宽限制等问题。在过去&#xff0c;企业通常会使用…

洛谷 P2294 [HNOI2005] 狡猾的商人

[HNOI2005] 狡猾的商人 题目描述 刁姹接到一个任务&#xff0c;为税务部门调查一位商人的账本&#xff0c;看看账本是不是伪造的。账本上记录了 n n n 个月以来的收入情况&#xff0c;其中第 i i i 个月的收入额为 a i a_i ai​&#xff0c; i 1 , 2 , … , n − 1 , n i…

Thinkphp6 模型 指定字段自增的方法

tp6要使用Db类必须使用门面方式&#xff08;think\facade\Db&#xff09;调用。 use think\facade\Db; 然后&#xff0c;用Db::raw就可以实现指定字段自增了。

46.全排列

原题链接&#xff1a;46.全排列 思路&#xff1a; 主要是和组合的区别&#xff0c;排列是可以从头使用元素 但是依旧是不允许有重复元素使用&#xff0c;所以依旧是需要进行去重 全代码&#xff1a; class Solution { public:vector<vector<int>> result;vector…

Doris动态分区(十四)

动态分区是在 Doris 0.12 版本中引入的新功能。旨在对表级别的分区实现生命周期管理&#xff08;TTL&#xff09;&#xff0c;减少用户的使用负担。 目前实现了动态添加分区及动态删除分区的功能。动态分区只支持 Range 分区。 原理 在某些使用场景下&#xff0c;用户会将表…

PHP while 和 do-while 循环 学习资料

PHP while 和 do-while 循环 在 PHP 中&#xff0c;while 和 do-while 是两种常用的循环结构&#xff0c;用于重复执行一段代码&#xff0c;直到满足指定条件为止。以下是对这两种循环的介绍和示例&#xff1a; while 循环 while 循环用于在指定条件为真时重复执行代码块。循…

计算机基础知识——字,字节,进制,short,byte等

目录 进制位&#xff0c;字节&#xff0c;字Byte&#xff0c;ShortByteBuf有符号数和无符号数 进制 HEX&#xff0c;Hexadecimal &#xff0c;十六进制。 DEC&#xff0c;Decimal &#xff0c;十进制。 OCT&#xff0c;Octal &#xff0c;八进制。 BIN&#xff0c;Binary &a…

【Android】声浪 UI 效果并附上详细代码

声浪效果是基于第三方实现的。 https://github.com/xfans/VoiceWaveView 将三方的 Kotlin 代码转 java 使用&#xff08;按照他的readme 进行依赖&#xff0c;好像少了点东西&#xff0c;至少本项目跑不起来&#xff09; 声浪效果在android 8 以上都是比较好的&#xff0c;不会…

外卖配送小程序商城的效果如何

线下餐饮店非常多&#xff0c;主要以同城生意为主&#xff0c;在线上电商和外卖平台的冲击下&#xff0c;传统商家仅通过传统方式经营很难宣传拓客及转化等&#xff0c;线上是必要的渠道&#xff0c;但入驻第三方平台又会有各种困扰&#xff0c;抽成/佣金/流量费/激烈竞争等。 …

【云原生-Kurbernetes篇】 玩转K8S不得不会的HELM

Helm 一、Helm1.1 使用背景1.2 Helm简介1.3 Helm的几个概念1.4 helm2 和 helm3 的区别1.5 chart包的关键组成 二、Helm相关命令2.1 应用管理操作2.2 Helm repository仓库管理命令2.2 Helm chart包管理命令2.3 Helm release(实例) 管理命令2.4 Helm私有仓库管理命令 三、部署He…

国外Twilio 发送sms短信

private static final String userName "Account SID"; private static final String password "Auth Token"; private String fromPhone; //你的手机号&#xff08;平台购买的手机号&#xff09;/*** 发送短信* */public static Map sms(String toPh…

Linux常用操作 Vim一般使用 SSH介绍 SSH密钥登录

目录 1. 常用命令 2. vim一般使用 3. SSH介绍 4. ssh密钥登录 1. 常用命令 1&#xff09;# 与 $ 提示的区别 # 表示用户有root权限&#xff0c;一般的以root用户登录提示符为#&#xff0c; $提示符表示用户为普通用户 2&#xff09;ifconfig 查看ip地址 eno1: 代表由主板…

“图纸保密大作战:上海迅软DSE解决方案守护机械公司核心资料

机械行业是我国重要的工业制造行业之一&#xff0c;相关企业在发展中往往需要用到ERP、PDM、PLM等系统来对产品信息进行管理&#xff0c;其中便涉及到大量文档和图纸等重要数据。然而随着业务的快速发展和数字化转型&#xff0c;机械行业也面临着如数据泄露、外来袭击攻击、内部…

以45°斜抛水平距离最远

已知&#xff1a;斜抛物体的初速度为 v 0 v_0 v0​&#xff08;与水平方向的夹角为 θ \theta θ&#xff09;&#xff0c;重力加速度为 g g g。 求&#xff1a;抛物轨迹方程&#xff1f; 垂直方向的速度为 v y v 0 sin ⁡ θ − g t v_yv_0 \sin \theta -gt vy​v0​sinθ−…

CNVD-2023-12632:泛微E-cology9 browserjsp SQL注入漏洞复现 [附POC]

文章目录 泛微E-cology9 browserjsp SQL注入漏洞(CNVD-2023-12632)漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 泛微E-cology9 browserjsp SQL注入漏洞(CNVD-2023-12632)漏洞复现 [附POC] 0x…

如何查找批量企业的联系方式?

​我们都知道&#xff0c;企业的联系方式在企业的年报中就能找到&#xff0c;但是年报上的电话真的是你要找的吗&#xff1f; 很多企业年报上留的是第三方代记账公司&#xff0c;或者是其他没用的号码&#xff0c;这对于做B端业务的企业来说是不够精准的。 市面上有很多做企业…

一起学docker系列之六如何搭建私服版本的Docker镜像仓库

目录 前言1 下载并运行私服版本的Docker镜像仓库2 准备上传私服的Docker镜像3 为镜像打上符合私服规范的标签4 修改Docker守护进程的配置文件5 推送镜像到私服版本的Docker镜像仓库6 验证私服的镜像结语 前言 Docker是一种开源的容器技术&#xff0c;可以让开发者和运维人员快…

Android : ListView + BaseAdapter-2简单应用

​​容器与适配器&#xff1a;​​​​​ http://t.csdnimg.cn/ZfAJ7 实体类 News.java package com.example.mylistviewadapter2.entity;public class News {private String title;private String content;private int img;public News(String title, String conte…