队列在队尾那一侧进行插入操作(入队),在队头那一侧进行删除操作(出队),而且是先进先出FIFO (最先进入队列的元素将首先被移除)。
队列在计算机领域中应用也十分广泛,比如在网络通信中,请求和响应通常以队列的形式进行排队,以确保数据按照正确的顺序进行传输,又比如说不同进程可以通过消息队列来传递数据和消息。
在C++中,可以使用标准库提供的std::queue
来创建和操作队列,不过这需要引入头文件queue
#include
创建一个队列和创建一个栈的写法是类似的,需要指定队列中元素的类型,不过这也意味着队列中的元素必须是相同的数据类型,下面的代码表示创建一个字符串类型的队列。
queue<string> que;
队列的常用操作又如下几种:
true
,否则返回false
q.push("Jack")
q.push("Mike")
q.pop(); // 弹出队列头部的元素,即"Jack"
string name = que.front(); // 获取队列的头部元素,但不会将其移除
bool isEmpty = que.empty() // 如果队列为空返回true,否则返回false
int queueSize = qie.size(); // 获取队列的长度(元素数量)
代码的基础结构:
#include
#include
#include
using namespace std;
int main() {
int n;
cin >> n;
string name;
}
创建一个字符串队列,然后在 n 次循环中将这 n 个人的姓名推入到队列中
queue<string> que;
while (n--) {
cin >> name;
que.push(name);
}
接收数字 m 和 m 个整数的输入,表示取奶茶的操作,如果数字为1,表示有人取走了奶茶(即出队操作);如果数字为2,表示有人新加入了奶茶(即入队操作)
int opt;
cin >> m;
while (m--) {
cin >> opt;
if (opt == 1 && !que.empty()) {
que.pop();
} else {
cin >> name;
que.push(name);
}
}
如果队列为空,说明没有取奶茶的人,输出 “There are no more people in the queue…”
if (que.empty()){
cout << “There are no more people in the queue..” << endl;
} else {
cout << que.front() << endl;
完整代码如下:
#include
#include
#include
using namespace std;
int main() {
int n, m, opt;
string name;
cin >> n;
queue<string> que;
while (n--) {
cin >> name;
que.push(name);
}
cin >> m;
while (m--) {
cin >> opt;
if (opt == 1 && !que.empty()) que.pop();
else {
cin >> name;
que.push(name);
}
}
if (que.empty()) cout << "There are no more people in the queue." << endl;
else cout << que.front() << endl;
}