问题描述: 两个栈模拟队列
思路: 栈A做入队列,栈B做出队列。栈满条件:AB都满; 栈空:AB都空
bool EnQueue(int e)
{
if(!A.full()) # 入队列没满,直接压入
{
A.push(e);
return true;
}
else
if(!B.full()) # A满了, B没满,把数据挪到B中
{
while(!B.full())
B.push(A.pop());
A.push(e)
return true;
}
else # AB都满,表示队列满了
return false;
}
int DeQueue()
{
if(!B.empty()) # B不空,直接弹出
return B.pop();
else
if(!A.empty()) # B空时,把A的元素压入B中
{
while(!A.empty())
B.push(A.pop());
return B.pop();
}
else # A也空,则表示队列空
return -1;
}
两个队列模拟栈
思路: 队列A存储数据,队列B做中转用。具体操作是:入栈,直接入队列A;出栈,如果A里面只有一个元素,那么直接出队即可,如果不止一个,将A的元素出队到B,直到A只剩一个元素,然后A出队,接着把B全部出队到A中。这样保证相对顺序不变。因此出栈操作前后队列B总是空的。
class Stack
{
private:
queue<int> A;
queue<int> B;
public:
bool push(int e)
{
if(A.isfull())
return false;
A.push_back(e);
}
bool pop(int &v)
{
if(A.size() == 0) return false;
if(A.size() == 1)
{
v = A.front();
}
else
{
while(A.size() > 1)
B.push_back(A.front());
v = A.front();
while(B.size() > 0)
A.push_back(B.front());
}
return true;
}
}