由两个栈组成的队列

本文介绍了一种使用两个栈来实现队列的方法,详细解释了如何通过特定的push、pop和top操作保持队列特性。当执行pop或top操作时,会确保第一个栈的所有元素已转移至第二个栈,从而正确地按队列顺序返回元素。
摘要由CSDN通过智能技术生成

题目

编写一个类,用两个栈实现队列,支持队列的基本操作有(push,pop,top)

解题思路

开始自己的思路有点偏差,想着是在push时就完成从stack1到stack2的迁移,但是实际上并没有必要

push时只进行push操作即可,push向stack1放入一个数据。在pop时,首先判断两个栈是否都为空,若是则当前队列为空;否则必须
在将stack1中的所有元素放入之后才能逐个从stack2逐个pop元素。
在取队列的顶元素时,与pop操作一样,要确定stack1中的元素已经
全部放入stack2中,此时才能返回队列顶元素
具体题解可参考书籍

代码

#include<iostream>
#include<stack>
using namespace std;

class stackToQueue {
private:
	stack<int> stack1;
	stack<int> stack2;
public:
	void mPush(int val);
	void mPop();
	int mPeek();
};

void stackToQueue::mPush(int val)
{
	stack1.push(val);
}

void stackToQueue::mPop()
{
	if (stack1.empty() && stack2.empty())
		printf("The queue is empty!\n");
	else if (stack2.empty())
	{
		while (!stack1.empty())
		{
			stack2.push(stack1.top());
			stack1.pop();
		}
	}
	stack2.pop();
}

int stackToQueue::mPeek()
{
	if (stack1.empty() && stack2.empty())
		printf("The queue is empty!\n");
	else if (stack2.empty())
	{
		while (!stack1.empty())
		{
			stack2.push(stack1.top());
			stack1.pop();
		}
	}
	return stack2.top();
}

int main()
{
	stackToQueue myQueue;
	for (int i = 0; i < 3; i++)
		myQueue.mPush(i);
	for (int j = 0; j < 3; j++)
	{
		cout << myQueue.mPeek() << endl;
		myQueue.mPop();
	}
	for (int i = 3; i < 5; i++)
		myQueue.mPush(i);
	for (int j = 0; j < 2; j++)
	{
		cout << myQueue.mPeek() << endl;
		myQueue.mPop();
	}
	getchar();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值