队列是一种基本的线性数据结构。它满足先进先出(First In ,First Out)的原则。

我们可以应用这种数据结构实现很多复杂的问题。但每次要手写队列的相关函数并不省事,我们便可以应用STL中的queue库来使用队列。

1调用头文件

#include<queue>

2.定义队列

queue<int>q;

3.基本操作

push().   ----向队列中添加新元素,填入的新元素进入队尾。

pop().     ----弹出队顶元素,不返回任何值。

(刘汝佳先生的算法竞赛入门经典中说,验证一个人是不是程序员只要问他push的反义词是啥...233)

front().    ----返回队顶元素的值

back().    ----返回队尾元素的值

empty().  ----验证队列是否为空,若空返回true

size().      ----返回队列大小

【以题带点】

洛谷P1996约瑟夫问题

传送门https://www.luogu.org/problemnew/show/P1996

题目描述

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

输入输出格式

输入格式:

n m

输出格式:

出圈的编号

输入输出样例

输入样例#1:

10 3
输出样例#1:

3 6 9 2 7 1 8 5 10 4

说明

m,n≤100

【代码实现】

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int n,m,ex=1;
int main()
{
scanf("%d%d",&n,&m);
queue<int>q;
for(int i=1;i<=n;i++) q.push(i);//队列初始化
while(!q.empty())//在队列不为空时
{
if(ex==m)//ex记录数到第几个人,初始为1,数到时就弹出队顶元素
{
cout<<q.front()<<" ";//先输出完再弹出,并为ex重新赋值
q.pop();
ex=1;
}
else
{
ex++;
q.push(q.front());//两条开始并不很理解的语句,push的作用不是把队首元素转移到队尾,而是在队尾再添加一个元素
q.pop();//把刚才在队尾填的弹出
}
}
return 0;
}

最新文章

  1. flume+sparkStreaming实例 实时监控文件demo
  2. IBM WebSphere MQ 7.5基本用法
  3. python之map、filter、reduce、lambda函数
  4. 字符串匹配的sunday算法
  5. 浏览器中打开IOS应用并传参
  6. AngularJS(5)-Http
  7. heritrix 相关
  8. thinkphp中关于rbac的两个session
  9. APNs-远程推送
  10. java线程优先级
  11. Python Web开发问题收集(二)
  12. angular清除select空格
  13. ubuntu 网络配置
  14. leetcode-algorithms-5 Longest Palindromic Substring
  15. 2017-2018-2 20155315《网络对抗技术》Exp9 :Web安全基础
  16. Python之 Lambda表达式
  17. 转mysql横向扩展和纵向扩展
  18. redis 面试
  19. luci框架-LUA的一个web框架使用
  20. 661. Image Smoother色阶中和器

热门文章

  1. Android兼容性测试CTS
  2. [Pyhton]weakref 弱引用
  3. 信雅达面试题atoi函数实现
  4. 使用Javamelody验证struts-spring框架与springMVC框架下action的訪问效率
  5. 一条数据的HBase之旅,简明HBase入门教程-开篇
  6. Mac OS安装Scrapy
  7. queue — A synchronized queue class
  8. Node中的promise简说及入门
  9. 【c++】map 迭代器删除演示样例
  10. HDFS集群安装部署