您的位置:首页 > 其它

题目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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: