题目1512:用两个栈实现队列
2013-08-26 15:22
330 查看
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。输入:每个输入文件包含一个测试样例。对于每个测试样例,第一行输入一个n(1<=n<=100000),代表队列操作的个数。接下来的n行,每行输入一个队列操作:1. PUSH X 向队列中push一个整数x(x>=0)2. POP 从队列中pop一个数。输出:对应每个测试案例,打印所有pop操作中从队列pop中的数字。如果执行pop操作时,队列为空,则打印-1。样例输入:
3 PUSH 10 POP POP样例输出:
10 -1
/**题目1512:用两个栈实现队列* */#include <iostream>#include <stack>#include <cstdio>#include <cstring>using namespace std;template <typename _type>class MyQueue {public :MyQueue () {}~MyQueue () {while (!org.empty())org.pop();while (!cpy.empty())cpy.pop();}void push (const _type& val) {org.push (val);}const _type pop () {if (cpy.empty ()) {if (org.empty())return static_cast<_type>(-1);else {while (!org.empty()) {cpy.push(org.top());org.pop();}}}const _type res_val = cpy.top();cpy.pop();return res_val;}private :stack<_type> org;stack<_type> cpy;};int main () {MyQueue<int> q;const char * PUSH = "PUSH";const char * POP = "POP";char cmd[20];int n, val;while (scanf ("%d", &n) == 1) {if (n < 1 )continue;for ( int i = 0; i < n; ++i ) {scanf ("%s", cmd) ;if (strcmp(cmd, PUSH) == 0) {scanf ("%d", &val) ;q.push(val);}else if (strcmp(cmd, POP) == 0) {printf ("%d\n", q.pop());}//cout << "cmd :" << cmd << "\tval : " << val << endl;}}return 0;}/**************************************************************Problem: 1512User: 小康师傅Language: C++Result: AcceptedTime:70 msMemory:1656 kb****************************************************************/[/code]
相关文章推荐
- 题目1512:用两个栈实现队列
- 题目1512:用两个栈实现队列 && 包含min函数的栈
- JD_题目1512——用两个栈实现队列
- 题目1512:用两个栈实现队列
- 九度OJ-题目1512:用两个栈实现队列
- 题目1512:用两个栈实现队列
- 题目1512:用两个栈实现队列
- 题目1512:用两个栈实现队列
- 九度_题目1512:用两个栈实现队列
- 用两个栈实现队列 c++ 9度题目号1512
- 【剑指Offer面试编程题】题目1512:用两个栈实现队列--九度OJ
- 【剑指Offer面试编程题】题目1512:用两个栈实现队列--九度OJ
- 题目1512:用两个栈实现队列
- 题目1512:用两个栈实现队列
- 题目1512:用两个栈实现队列
- 【九度】题目1512:用两个栈实现队列
- 题目1512:用两个栈实现队列-九度
- [九度OnlineJudge][剑指Offer]题目1512:用两个栈实现队列
- 题目1512:用两个栈实现队列
- 九度OJ_1512:用两个栈实现队列