题目描述 使用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-30 21:33:50 浏览: 110
用类来实现简单的栈。栈中有以下操作:元素入栈,读出栈顶元素值,退栈,判断栈顶空否,如果溢出,程序终止。
5星 · 资源好评率100%
这道题是要求使用STL中的单端队列queue来实现栈的操作。栈的特点是后入先出,而队列的特点是先入先出,因此可以通过两个队列来模拟栈的操作。
具体实现如下:
1. 定义一个mystack类,其中包含两个queue<int>类型的成员变量q1和q2,分别表示栈和辅助队列。
2. 实现mystack类的构造函数,将q1和q2清空。
3. 实现mystack类的push(int x)函数,将元素x插入到q1的队尾。
4. 实现mystack类的pop()函数,首先判断栈是否为空,如果为空则返回-1;否则将q1中的元素依次移动到q2中,直到q1中只剩下一个元素,将该元素出队并返回。
5. 实现mystack类的top()函数,首先判断栈是否为空,如果为空则返回-1;否则将q1中的元素依次移动到q2中,直到q1中只剩下一个元素,返回该元素。
6. 实现mystack类的empty()函数,判断q1是否为空即可。
7. 在main函数中,首先读入操作次数n,然后根据操作类型分别调用mystack类的对应函数完成操作,并输出相应的结果。
8. 最后,调用print函数输出栈中的元素。
完整代码如下:
阅读全文