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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值