简介:
一种线性结构,只能使用首和末
特点:
(1)队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构;
(2)在队尾添加元素,在队头删除元素。
概念:
(1)队头与队尾: 允许元素插入的一端称为队尾,允许元素删除的一端称为队头;
(2)入队:队列的插入操作;
(3)出队:队列的删除操作。
创建方式:
queue<int> q;//创建了一个名为q的队列
使用方法:
q.push();//入队
q.pop();//出队
q.front();//查询队首
q.empty();//检查队列是否为空
q.size();//输出队列的长度
q.back();//查找队末
分述简介:
for (int i=0;i<=10;i++){ q.push(i); }
//此时队列q里为{10 9 8 7 6 5 4 3 2 1 0}
q.pop();
//此时队列q里为{10 9 8 7 6 5 4 3 2 1}
q.push(q.front());
//此时队列q里为{1 10 9 8 7 6 5 4 3 2 1}
q.push(q.bank());
//此时队列q里为{1 1 10 9 8 7 6 5 4 3 2 1}
cout<<q.size();
//此时输出12
cout<<q.empty();
//此时输出0(即ture)
应用:
2037:【例5.4】约瑟夫问题时间限制: 1000 ms 内存限制: 65536 KB 提交数: 41115 通过数: 22360 【题目描述】NN个人围成一圈,从第一个人开始报数,数到MM的人出圈;再由下一个人开始报数,数到MM的人出圈;…输出依次出圈的人的编号。 【输入】输入NN和MM。 【输出】输出一行,依次出圈的人的编号。 【输入样例】8 5 【输出样例】5 2 8 7 1 4 6 3 【提示】【数据范围】 对于所有数据,2≤N,M≤10002≤N,M≤1000。 注:转载自信息学奥赛一本通——第一部分 C++语言—— 第五章 数 组 |
//约瑟夫问题 #include <bits/stdc++.h> using namespace std; int main() { queue<int> q; int m, n, c = 0; cin >> m >> n; for (int i = 1; i <= m; i++) { q.push(i); } while (!q.empty()) { c++; if (c != n) { q.push(q.front()); q.pop(); } else { cout << q.front() << " "; q.pop(); c = 0; } } return 0; }