队列的基本概念及其应用

队列(Queue)是一种操作受限的线性结构,新元素只能从队列的一端插入,并且只能从另一端删除已有的元素,遵循先进先出(First-In First-Out,FIFO),越早入队的元素越早出队,越晚入队的元素越晚出队。

头文件

#include<queue>

using namespace std;

初始化

queue<int> myQueue;

基本操作

queue<int> myQueue;
//入队(队尾)
myQueue.push(1);
//出队(队首)
myQueue.pop();
//判空
myQueue.empty();
//元素个数
myQueue.size();
//队首元素
myQueue.front();
//队尾元素
myQueue.back();

参考例题(约瑟夫问题)

在这里插入图片描述

//参考答案 约瑟夫问题

#include<cstdio>
#include<queue>

using namespace std;

int main() {
    int n, p, m;
    while (scanf("%d %d %d", &n, &p, &m) != EOF) {
        if(0 == n and 0 == p and 0 == m){
            break;
        }
        queue<int> childens;
        //首次入队
        for(int i = p; i <= n; i++){
            childens.push(i);
        }
        for(int i = 1; i < p; i++){
            childens.push(i);
        }
        //每次从1报到m,报到m的小孩出去就不要回来了,没报到m的小孩出去后就到最后
        while(true){
            if(childens.empty()){
                break;
            }
            for(int i = 1; i <= m; i++){
                if(i == m){
                    printf("%d,", childens.front());
                    childens.pop();
                }
                else{
                    int temp = childens.front();
                    childens.pop();
                    childens.push(temp);
                }
            }
        }
        //result
    }
}

参考内容:
机试的意义和主要内容
百练
计算机考研机试指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值