队列同堆栈一样,是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。
以下内容全为个人理解。
#include <queue>
#include <iostream>
using namespace std;
int main()
{
queue<char> q;
char a = 'A';
q.push(a);
q.push('B');
q.push(67);
cout << "在队列末尾依次插入 A B C" << endl;
char u = q.back();
cout << "队列最后一个元素为:" << u << endl;
char v = q.front();
cout << "队列第一个元素为:" << v << endl;
q.pop();
v = q.front();
cout << "删除第一个元素后,队列第一个元素为:" << v << endl;
int size = q.size();
cout << "队列中存在 " << size << " 个元素" << endl;
cout << "判断队列是否为空,清空前:" << q.empty() << endl;
while (!q.empty())
q.pop();
cout << "清空后:" << q.empty() << endl;
return 0;
}
输出:
在队列末尾依次插入 A B C
队列最后一个元素为:C
队列第一个元素为:A
删除第一个元素后,队列第一个元素为:B
队列中存在 2 个元素
判断队列是否为空,清空前:0
清空后:1
举例
题目:约瑟夫问题。
AC 代码:
#include <iostream>
#include <queue>
using namespace std;
int m, n, i = 1;
int main()
{
cin >> m >> n;
queue<int> a;
for (int i = 1; i < m + 1; i++)
a.push(i);
while (a.empty() != 1)
{
if (i == n)
{
cout << a.front() << " ";
i = 1;
}
else
{
a.push(a.front());
i++;
}
a.pop();
}
return 0;
}