STL<queue>的使用

队列是一种基本的线性数据结构。它满足先进先出(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;
}

 

posted @ 2018-02-13 18:36  cellur925&Chemist  阅读(196)  评论(0编辑  收藏  举报