思路:为了完成栈的先进后出,插入数据时往队列1中插入,弹出时由于要弹出最后插入的数据,所以队列1中其他的数据出队并压入队列2中,然后弹出队列1中剩余的那个数据就完成了栈的操作。当队列1中没有数据时则将队列2中的数据只保留1个,其余出队并压入队列1中,随后弹出队列2中那个剩余数据。
#include <stdio.h> #include <iostream> #include <queue> using namespace std; class MyStack { public: //入栈 void push(const char & c) { q1.push(c); } //出栈 char deleteTop() { char back; if (q1.size() == 1) { back = q1.front(); q1.pop(); return back; } if (q1.size() > 1) //q1中元素多于1个 { while (q1.size()!=1) //把多的值送到q2 { char & c = q1.front(); q1.pop(); q2.push(c); } back = q1.front(); q1.pop(); }else if (q1.size() <= 0) //q1中没有元素了 { if (q2.size() <= 0) //q2中也没有元素了 throw exception("栈为空"); while (q2.size() != 1) { char &c = q2.front(); q2.pop(); q1.push(c); } back = q2.front(); q2.pop(); } return back; } bool haveValue() { return (q1.size() != 0 || q2.size() != 0); } private: queue<char> q1; queue<char> q2; }; int main(int argc,char *argv[]) { MyStack stack; for (char c = 'a'; c < 'z' + 1; c++) { stack.push(c); } while (stack.haveValue()) { cout << stack.deleteTop() << endl; } return 0; }
