队列(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
}
}
参考内容:
机试的意义和主要内容
百练
计算机考研机试指南