《剑指offer》面试题9:两个队列实现一个栈

问题描述:用两个队列实现一个栈。

思路:

    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();
	}
}

点赞