两个栈实现一个队列

题目描述:用两个栈实现一个队列,分别完成在队列尾部插入整数和在队头删除整数的功能。(若队列中没有元素,删除函数返回-1)
解题思路:众所周知,栈的基本特点是先入后出,队列的基本特点是先入先出。那么两个栈所需要完成的任务就是一个先入,一个先出,那么如何实现这个功能呢?我们将栈1功能定为入队,栈2功能定为出队,此时要让先入栈1的先出,我们可以把栈1的所有元素都入到栈2中(顺序反过来),再将栈2的第一个元素出栈(相当于栈1的栈顶元素==队列的头部元素),最后将栈2的元素重新入栈到栈1中。如此即可完成队列的头部出队,即头删。尾插即直接入栈到栈1中。的图解如下:

 

 代码实现:

class Queue
{
	stack1<int>st1;
	stack2<int>st2;
public:
	Queue(){}

	void appendTail(int value)//入队
	{
		stack1.push(value)l;
	}

	int deleteHead()//出队
	{
		if (stack1.empty())return -1;
		while (!stack1.empty())//st1-->st2
		{
			int tmp = stack1.top();
			stack1.pop();
			stack2.push(tmp);
		}

		int res = stack2.top();//第一个元素请滚出去
		stack2.pop();

		while (stack2.empty())//st2-->st1
		{
			int tmp = stack2.top();
			stack1.pop();
			stack1.push(tmp);
		}

		return res;
	}
};

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值