news 2026/7/19 9:46:10

C++实现队列结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++实现队列结构

队列是一种动态集合,是比较常用的一种数据结构,它的特点就是:先进先出。

队列是一种特殊的线性表,他的特殊在于队列的插入和删除操作分别在表的两端进行。插入的一端称为队尾,删除的那一端称为队首。队列的插入操作和删除操作分别称为进队和出队。

生活中排队购票的等现象就是队列的例子,他的特点是先到先享受购票服务,正好和栈结构相反。对于一个队列:

{k0,k1,k2,k3,k4,......kn}

k0就是队首,kn就是队尾,出队时则是k0先出队,假如kn+1要入队则排到kn的后面。

假如一个队列的初始元素为:

如果在队列中插入一个元素9,则变成

之后在队列中进行一次出队操作,则变成

经过分析,我们就能得出队列中的一些属性:

队列:myqueue

队列最大容量:maxsize

队列当前容量: int curSize

指向队头的指针:Front

指向队尾的指针:tail

入队的成员函数:void push(int data)

出队的成员函数:void pop()

获取队头元素成员函数:int front()

判断是否为空成员函数:bool empty()

返回队列元素个数成员函数:int size()

类的结构:

class my_queue { public: my_queue(int maxsize = 100) :maxsize(maxsize) { myqueue = new int[maxsize]; assert(myqueue);//断言处理,若申请内存失败,则引发中断 curSize = 0; this->Front = 0; tail = 0; } ~my_queue() { delete myqueue; } void push(int data); void pop(); int front(); bool empty(); int size(); protected: int maxsize;//最大容量 int* myqueue;//队列数组 int Front; //指向队头元素 int tail;//指向队尾元素 int curSize;//队列中的元素个数 };

入队的成员函数:void push(int data)

void my_queue::push(int data) { if (curSize < maxsize) { myqueue[++tail] = data; curSize++; } else cout << "队列已满,无法插入" << endl; }

出队的成员函数:void pop()

void my_queue::pop() { if (curSize > 0) { Front++; --curSize; } else cout << "队列已空,无法出队" << endl; }

获取队头元素成员函数:int front()

int my_queue::front() { return myqueue[Front]; }

判断是否为空成员函数:bool empty()

bool my_queue::empty() { if (curSize == 0) return true; else return false; }

返回队列元素个数成员函数:int size()

int my_queue::size() { return curSize; }

总代码

#include<iostream> #include<vector> #include<string> #include<assert.h> using namespace std; class my_queue { public: my_queue(int maxsize = 100) :maxsize(maxsize) { myqueue = new int[maxsize]; assert(myqueue);//断言处理,若申请内存失败,则引发中断 curSize = 0; this->Front = 1; tail = 0; } ~my_queue() { delete myqueue; } void push(int data); void pop(); int front(); bool empty(); int size(); protected: int maxsize;//最大容量 int* myqueue;//队列数组 int Front; //指向队头元素 int tail;//指向队尾元素 int curSize;//队列中的元素个数 }; int main() { int temp[] = { 3,5,7,1,3,6 }; my_queue que(20); for (int i = 0; i < 6; i++) que.push(temp[i]); while (que.empty() != true) { cout << que.front() << endl; que.pop(); } return 0; } void my_queue::push(int data) { if (curSize < maxsize) { myqueue[++tail] = data; curSize++; } else cout << "队列已满,无法插入" << endl; } void my_queue::pop() { if (curSize > 0) { Front++; --curSize; } else cout << "队列已空,无法出队" << endl; } int my_queue::front() { return myqueue[Front]; } bool my_queue::empty() { if (curSize == 0) return true; else return false; } int my_queue::size() { return curSize; }

测试结果

谢谢大家!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 9:45:31

Godot资源解包终极指南:3分钟提取游戏素材的完整教程

Godot资源解包终极指南&#xff1a;3分钟提取游戏素材的完整教程 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 你是否曾经想探究Godot游戏内部的资源秘密&#xff1f;想要获取那些精美的游戏纹理、…

作者头像 李华
网站建设 2026/7/19 9:45:28

2026最全MP4转MP3免费方法:电脑、手机、在线无水印工具手把手教程

日常处理视频素材、提取MV背景音乐、保存网课音频、剪辑配音素材时&#xff0c;经常需要将MP4视频中的音频单独提取为MP3格式。2026年市面上多数转换工具存在水印、限速、强制付费、捆绑广告、隐私泄露等问题&#xff0c;很多新手很难找到安全靠谱的免费方案。本文整理了全平台…

作者头像 李华
网站建设 2026/7/19 9:44:46

智能番茄小说下载器:Rust构建的高效电子书制作解决方案深度解析

智能番茄小说下载器&#xff1a;Rust构建的高效电子书制作解决方案深度解析 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 番茄小说下载器是一款基于Rust语言开发的智能小说下…

作者头像 李华
网站建设 2026/7/19 9:44:30

Unity游戏逆向实战:利用Il2CppDumper还原符号表与实现无敌模式

1. 项目概述与核心价值 最近在技术社区里&#xff0c;看到不少朋友对Unity游戏的安全机制和逆向工程感兴趣&#xff0c;尤其是那些使用Il2Cpp后端编译的游戏。这类游戏将C#代码编译成C&#xff0c;再打包成二进制文件&#xff0c;传统的反编译工具直接失效&#xff0c;让很多想…

作者头像 李华
网站建设 2026/7/19 9:41:26

Java ArrayList序列化机制与性能优化实践

1. 项目概述&#xff1a;ArrayList序列化在Java中的核心机制ArrayList作为Java集合框架中最常用的动态数组实现&#xff0c;其序列化机制的设计体现了Java团队对性能和内存优化的深刻考量。很多初级开发者在使用ArrayList时&#xff0c;往往直接调用默认的序列化方法&#xff0…

作者头像 李华
网站建设 2026/7/19 9:40:15

科学健康管理,筑牢日常健康防线

什么是健康管理&#xff1f;很多人对健康管理的认知还停留在「生病才看医生」的阶段&#xff0c;其实健康管理是覆盖全人群、全生命周期的健康呵护逻辑&#xff0c;核心是通过对个人的健康状况、生活习惯、遗传因素等多维度信息的采集评估&#xff0c;提前识别潜在的健康风险&a…

作者头像 李华