1、两个栈实现一个队列
入队时,直接压入stack1中。
出队时,判断stack2是否为空,如果stack2为空,则将stack1中的元素倒入stack2中,否则直接弹出stack2中的元素。
//入队操作
void EnQueue(stack<int> &s1,stack<int> &s2,int m)
{
s1.push(m);
}
//出队操作
void DeQueue(stack<int> &s1,stack<int> &s2,int &m)
{
if (s2.empty())
{
int p = s1.size();
for (int i=0;i<p;i++)
{
s2.push(s1.top());
s1.pop();
}
}
m = s2.top();
s2.pop();
}
2、两个队列实现一个栈
将queue1用作进栈出栈,queue2作为一个中转站。
入栈时,直接压入queue1中。
出栈时,先将queue1中的元素除最后一个元素外依次出队列,并压入队列queue2中,将留在queue1中的最后一个元素出队列即为出栈元素,最后还要把queue2中的元素再次压入queue1中。
实现代码如下:
//进栈操作
void stackpush(queue<int> &q1,queue<int> &q2,int m)
{
q1.push(m);
}
//出栈操作
void stackpop(queue<int> &q1,queue<int> &q2,int &m)
{
int p = q1.size();
for (int i=0;i<p-1;i++)
{
q2.push(q1.front());
q1.pop();
}
m = q1.front();
q1.pop();
int l = q2.size();
for (int j = 0;j<l;j++)
{
q1.push(q2.front());
q2.pop();
}
}