题目描述 使用stl中的单端队列queue实现栈 输入 6 empty push 2 push 3 push 5 top pop 输出 st empty push 2 push 3 push 5 top 5 pop 5 3 2 提示 题目需要使用queue的四个函数 push(int) 在队列尾部插入元素 front() 获取队列头部的元素 pop() 删除队列头部的元素 empty() 判断队列是否为空 mystack类的push(int x)中x为[1, 9] mystack类的pop()和top()在栈为空时返回-1 mystack.h #ifndef __MYSTACK__ #define __MYSTACK__ #include <queue> using namespace std; class mystack { private: queue<int> q1; queue<int> q2; public: mystack(); void push(int); int pop(); int top(); bool empty(); }; #endif main.cpp #include <iostream> #include <string> #include <queue> #include "mystack.h" using namespace std; void print(mystack& st) { while (!st.empty()) { int tmp = st.pop(); cout << tmp << ' '; } cout << endl; } int main() { mystack st; int n; cin >> n; while (n--) { string op; cin >> op; if (op == "push") { int x; cin >> x; st.push(x); cout << "push " << x << endl; } else if (op == "pop") { int res = st.pop(); if (res == -1) { cout << "pop failed" << endl; } else { cout << "pop " << res << endl; } } else if (op == "top") { int res = st.top(); if (res == -1) { cout << "top failed" << endl; } else { cout << "top " << res << endl; } } else if (op == "empty") { if (st.empty()) { cout << "st empty" << endl; } else { cout << "st not empty" << endl; } } } print(st); return 0; }
时间: 2024-03-26 19:34:41 浏览: 103
用类来实现简单的栈。栈中有以下操作:元素入栈,读出栈顶元素值,退栈,判断栈顶空否,如果溢出,程序终止。
5星 · 资源好评率100%
好的,这是一个实现栈的题目,通过使用STL中的单端队列queue来实现。下面是代码实现:
mystack.h文件:
```cpp
#ifndef __MYSTACK__
#define __MYSTACK__
#include <queue>
using namespace std;
class mystack {
private:
queue<int> q1;
queue<int> q2;
public:
mystack();
void push(int);
int pop();
int top();
bool empty();
};
#endif
```
mystack.cpp文件:
```cpp
#include "mystack.h"
mystack::mystack() {}
void mystack::push(int x) {
q1.push(x);
}
int mystack::pop() {
int res = top();
if (res != -1) {
q2.pop();
}
return res;
}
int mystack::top() {
if (q1.empty()) {
return -1;
}
while (q1.size() > 1) {
q2.push(q1.front());
q1.pop();
}
int res = q1.front();
q1.pop();
q2.push(res);
swap(q1, q2);
return res;
}
bool mystack::empty() {
return q1.empty() && q2.empty();
}
```
然后在main函数中,按照题目要求,通过读入命令来进行栈的操作,并输出结果:
```cpp
#include <iostream>
#include <string>
#include <queue>
#include "mystack.h"
using namespace std;
void print(mystack& st) {
while (!st.empty()) {
int tmp = st.pop();
cout << tmp << ' ';
}
cout << endl;
}
int main() {
mystack st;
int n;
cin >> n;
while (n--) {
string op;
cin >> op;
if (op == "push") {
int x;
cin >> x;
st.push(x);
cout << "push " << x << endl;
} else if (op == "pop") {
int res = st.pop();
if (res == -1) {
cout << "pop failed" << endl;
} else {
cout << "pop " << res << endl;
}
} else if (op == "top") {
int res = st.top();
if (res == -1) {
cout << "top failed" << endl;
} else {
cout << "top " << res << endl;
}
} else if (op == "empty") {
if (st.empty()) {
cout << "st empty" << endl;
} else {
cout << "st not empty" << endl;
}
}
}
print(st);
return 0;
}
```
这样就完成了题目要求的栈的实现。
阅读全文