C++数据结构02 队列及其应用

目录

队列及其特点

利用数组模拟队列的基本操作

创建队列

空队条件

元素入队

 元素出队

 模拟超市收银问题

队列操作

初始化

入队操作

出队操作

取出队首元素

STL模板中队列的基本使用

训练:约瑟夫问题

参考程序


队列及其特点

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,前端一般叫做队头,后端叫队尾。队列就像学校做操站队一样,来的人一个一个往后站,走的时候从前往后一个一个走。

总结队列的特点为:先入先出,即先入队的元素先出队。

利用数组模拟队列的基本操作

对于队列的使用,我们可以直接利用数组来模拟队列的基本操作,具体实现如下:

创建队列

int que[105];     //定义一个能存放105个数字的数组来模拟队列
int front=0,rear=0;    //front与rear分别表示队头和队尾元素的位置。

空队条件

front==rear;

元素入队

que[rear++]=x;    //元素x入队

 元素出队

x=que[front++];  //队首元素出队,并将元素值赋值给x

 模拟超市收银问题

假设有一批顾客来到超市,在结账时,必须排队付款。先到达收银台的顾客先结账。

我们模拟收银过程,使用队列来实现,一般队列会提供以下几个功能:

push(x):将x压入队列,即顾客来排队,应该站在队尾。
pop():弹出队首元素,即排在最前面的人结完账后,离开队列。
front():查询队首元素,即知道目前是谁结账。

队列操作

初始化

const int MAXN=1100;
int que[MAXN];
int head = 0;
int tail = 0;

入队操作

void push(int x){if(tail>=MAXN) printf("队列溢出");else{que[tail] = x;tail++;}
}

出队操作

void pop(){if(head==tail)  printf("队列为空");else head++;
}

取出队首元素

int front(){if(head==tail) printf("队列为空");else return que[head];
}

STL模板中队列的基本使用

对于队列的使用,我们也可以直接利用STL模板来实现,STL模板库中队列的基本操作如下:

头文件:#include<queue>

创建一个存放int类型数据的空队列s:queue<int> s;

s.empty():  判断队列是否为空,为空返回true,否则返回false;

s.size():  返回队列中元素的个数;

s.front():  获取队首元素的值;

s.back():  获取队尾元素的值;

s.push(k):   向队尾插入新的元素k;

s.pop():    删除队列s的队首元素。

训练:约瑟夫问题

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号。

【输入描述】n和m

【输出描述】出列的顺序

【输入样例】4 17

【输出样例】1 3 4 2

参考程序

#include<iostream>
#include<queue>
using namespace std;
queue<int> que;
int m,n;
int main(){cin>>n>>m;for(int i=1;i<=n;i++) que.push(i); //编号入队  int k=1;while(!que.empty()){if(k==m){ //数到了mcout<<que.front()<<" "; //输出que.pop(); //出队k=1;  //再次初始化k}else{que.push(que.front());//队首放到队尾            que.pop(); //出队k++;}}return 0;
}

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

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

相关文章

Mac如何卸载掉系统自带的预装软件吗 Mac第三方软件无法卸载是为什么 macbook系统软件怎么删除?

在使用Mac电脑时&#xff0c;有时候我们会发现系统预装的一些应用并不常用或者不符合个人需求&#xff0c;想要将它们卸载掉。然而&#xff0c;对于系统自带的软件&#xff0c;卸载并不简单&#xff0c;需要谨慎对待以免影响系统稳定性和功能正常运行。 一、Mac可以卸载掉系统自…

Android安全开发之 Provider 组件安全

Android系统中的Content Provider组件是一种用于在不同应用之间共享数据的机制。它提供了一种安全、可控的方式&#xff0c;允许应用访问其他应用的数据。然而&#xff0c;如果Provider组件的安全措施没有得到妥善实现&#xff0c;则可能会导致严重的安全漏洞&#xff0c;例如数…

C语言题目:选择排序

题目描述 用选择法对10个整数从小到大排序。 输入格式 输入10个无序的数字 输出格式 排序好的10个整数 样例输入 4 85 3 234 45 345 345 122 30 12 样例输出 3 4 12 30 45 85 122 234 345 345 代码分析 1. 引入头文件 代码首先引入了stdio.h头文件&#xff0c;这是C语言标…

比利时海外媒体宣发,发稿促进媒体通稿发布新形势-大舍传媒

引言 随着全球化的推进&#xff0c;海外媒体的影响力也日益增强。在这一背景下&#xff0c;比利时海外媒体的宣发工作成为了媒体通稿发布的新形势。大舍传媒作为一家专注于宣传推广的公司&#xff0c;一直致力于与比利时博伊克邮报&#xff08;boicpost&#xff09;合作&#…

用数据说话,效果好上一万倍,不是空口说白话的“好很多”

作为一名大数据开发者&#xff0c;我深知数据的有很大的魔力&#xff08;我这句话就没用数据&#xff0c;听上去很无力&#xff09;。数据不仅仅是数字和图表&#xff0c;它还能赋予我们强大的说服力和权威感。让我给你详细讲讲数据如何让理论插上翅膀。 目录 数据的“靠谱”…

文字悬停效果

文字悬停效果 效果展示 CSS 知识点 CSS 变量使用回顾-webkit-text-stroke 属性的运用与回顾 页面整体结构实现 <ul><li style"--clr: #e6444f"><a href"#" class"text">First</a></li><li style"--cl…

算法训练营day59

题目1&#xff1a;115. 不同的子序列 - 力扣&#xff08;LeetCode&#xff09; 这里的初始化第一列为1&#xff0c;表示t是空字符串 在s的子序列中有1种情况 递推公式也不同 class Solution { public:int numDistinct(string s, string t) {vector<vector<int>>…

如何看待有企业使用AI写代码,6个月研发提效超20%,未来AI对程序员会有多大影响?

AIGC对程序员来说&#xff0c;有远虑&#xff0c;无近忧。 目前看来&#xff0c;AI是程序员编写代码很好的助手&#xff0c;尤其在代码补全、照样子写代码、生成注释及文档等方面效果非常好&#xff0c;还有能省去很多查api的时间。 但即便如此&#xff0c;它也仅仅能解决造轮子…

ripro主题如何使用memcached来加速

ripro主题是个很不错的资源付费下载主题。主题自带了缓存加速开关&#xff0c;只要开启了缓存加速功能&#xff0c;正常情况下能让网站访问的速度提升很大。 但好多人这么做了却发现没啥加速效果&#xff0c;原因就在于wordpress里缺少了memcache文件。只需要把object-cache.ph…

CATIA软件 输入无参格式还原成为有参模型教程

上图为零件设计中特征辨识的命令栏&#xff0c;此次分享是对手动/自动特征辨识的命令应用&#xff0c;作个简单操作的分享了解。在CATIA软件中把输入的无参模型通过特征化后转化为有参模型的过程。其实CATIA软件早有这个功能提供给用户使用了&#xff0c;可能大家很少用。有了手…

NAT概述

NAT概念 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是一种用于修改网络地址信息的技术&#xff0c;主要用于在路由器或防火墙上进行地址转换&#xff0c;以解决 IPv4 地址短缺问题、提高网络安全性以及实现私有网络与公有网络之间的通信…

java:spring使用【XXXPostProcessor】添加bean定义,修改bean定义、代理bean

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89433361 # 项目代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

设计模式-享元模式(结构型)

享元模式 享元模式是一种结构型模式&#xff0c;它主要用于减少创建对象的数量&#xff0c;减少内存占用。通过重用现有对象的方式&#xff0c;如果未找到匹配对象则新建对象。线程池、数据库连接池、常量池等池化的思想就是享元模式的一种应用。 图解 角色 享元工厂&#xf…

如何在WordPress中上传多种安装包文件

WordPress默认情况下不允许上传某些类型的文件&#xff0c;如应用安装包文件&#xff08;如APK、EXE、DMG等&#xff09;。为了实现上传这些文件&#xff0c;我们需要调整WordPress的文件上传限制。本文将详细介绍如何在WordPress中上传Windows、Mac、Linux、Android、iOS和Har…

web前端图片分区:深入探索其原理、应用与未来趋势

web前端图片分区&#xff1a;深入探索其原理、应用与未来趋势 在web前端开发中&#xff0c;图片分区作为一种优化技术&#xff0c;正逐渐受到开发者的青睐。通过将大型图片划分为多个小区块&#xff0c;图片分区能够实现更高效的加载和渲染&#xff0c;从而提升用户体验。本文…

Python第二语言(五、Python文件相关操作)

目录 1. 文件编码的概念 2. 文件的读取操作 2.1 什么是文件 2.2 open()打开函数 2.3 mode常用的三种基础访问模式 2.4 文件操作及案例 3. 文件的写入操作及刷新文件&#xff1a;write与flush 4. 文件的追加操作 5. 文件操作的综合案例&#xff08;文件备份操作&#x…

Linux文件系统讲解!

一、Linux文件系统历史 1、在早期的时候Linux各种不同发行版拥有自己各自自定义的文件系统层级结构。 2、当我用Red hat转向玩Debian时&#xff0c;我进入/etc我都是懵的。 3、后来Linux社区做了一个标准、FHS&#xff08;文件系统标准层次结构&#xff09;。来帮助Linux系统的…

1_常见指令【Linux中常见30个指令的学习和使用】【万字长文】

常见指令以及权限理解 开始学习linux前的注意事项 在学习linux之前&#xff0c;我们要知道linux是一个操作系统。 那操作系统是什么呢&#xff1f;&#xff08;这里只做大概了解&#xff09; 操作系统就是一个管理软硬件的软件。 它对上提供良好&#xff08;稳定、高效、安…

做材料科学领域研究热点:高通量多尺度材料计算和机器学习

研究背景 材料科学是一个重要领域&#xff0c;涉及物质的研究和利用。随着科技进步&#xff0c;材料学已成为多学科交叉的前沿领域之一&#xff0c;融合物理、化学、数学、信息、力学和计算科学等知识。寻找更坚固的新材料已成为当今急需解决的问题。 材料基因工程作为一项颠覆…