问题描述:用两个队列实现一个栈。
思路:
push:如果两个队列都为空,那么默认选择一个作为插入元素(开始的时候);如果队列有一个不为空,那么就选择不为空的作为push队列;
pop:判断两个队列是否都为空,如果都为空,返回栈空;假设queue1不为空,那么先将queue1的n-1个元素删除并插入到queue2中,第n个元素便是所要出栈的元素。
代码如下:
1.类的定义:
class Stack
{
public:
void push(int node);
void pop();
public:
queue<int> queue1;
queue<int> queue2;
};
2.push
void Stack::push(int node)
{
if (queue1.empty() && queue2.empty())
{
queue1.push(node);
}
else if (!queue1.empty())
{
queue1.push(node);
}
else
{
queue2.push(node);
}
}
3.pop
void Stack::pop()
{
if (queue1.empty() && queue2.empty())
{
cout << "empty" << endl;
return;
}
else if (!queue1.empty())
{
while (queue1.size() >= 2)
{
queue2.push(queue1.front());
queue1.pop();
}
cout << queue1.front() << endl;
queue1.pop();
}
else
{
while (queue2.size() >= 2)
{
queue1.push(queue2.front());
queue2.pop();
}
cout << queue2.front() << endl;
queue2.pop();
}
}