思路:为了完成栈的先进后出,插入数据时往队列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;
}