写一段代码,要求如下 2.已知Q是一个非空队列,S是一个空栈。编写算法实现:将队列Q中的所有元素逆置。 要求: ①调用堆栈和队列的操作函数实现该算法。 ②编写一个主函数进行测试。
时间: 2024-05-10 21:14:00 浏览: 105
已知Q是一个非空队列,S是一个空栈。仅用队列和栈的ADT函数和少量工作变量,编写一个算法,将队列Q中的所有元素逆置
5星 · 资源好评率100%
好的,以下是实现代码:
```c++
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
void reverseQueue(queue<int>& q) {
stack<int> s;
while (!q.empty()) {
s.push(q.front());
q.pop();
}
while (!s.empty()) {
q.push(s.top());
s.pop();
}
}
int main() {
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
q.push(5);
cout << "原始队列:";
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
q.push(1);
q.push(2);
q.push(3);
q.push(4);
q.push(5);
reverseQueue(q);
cout << "\n逆置队列后:";
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
return 0;
}
```
运行结果:
```
原始队列:1 2 3 4 5
逆置队列后:5 4 3 2 1
```
解释:首先我们定义了一个 `reverseQueue` 函数,该函数的参数是一个队列的引用。在该函数中,我们创建了一个空栈 `s`,然后将队列 `q` 的所有元素依次弹出并压入栈 `s` 中。接着,我们再将栈 `s` 的所有元素依次弹出并压入队列 `q` 中,这样就完成了队列的逆置。
在主函数中,我们先创建了一个包含 1~5 的队列 `q`,然后输出原始队列中的所有元素。接着,我们调用 `reverseQueue` 函数对队列 `q` 进行逆置,最后再次输出队列中的所有元素,可以看到队列已经逆置成功。
阅读全文