• 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;
    }
    
    独立意志与自由思想是必须争的,且须以生死力争。
  • 相关阅读:
    python-裴波那契数列
    python-装饰器
    登录权限,认证
    sevlet面试题总结
    ssm整合
    配置文件sshmvc
    利用反射来实现动态代理
    springmvc spring hibernate整合
    中期项目总结
    web servlet 网址http://www.cnblogs.com/mengdd/tag/Servlet/
  • 原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/8447185.html
Copyright © 2020-2023  润新知