用两个栈模拟队列的伪代码实现

已知条件:

栈S1与栈S2,有判断栈满函数Isfull(),判栈空IsEmpty(),入栈push(),出栈pop();用这些基本操作来实现EnQueue(),DeQueue(),IsQueueEmpty()函数;

基本思路:栈具有先进后出的特性,所以我们用s1来存储进队的元素,用s2来出队,在这个过程中,由于s1出栈的数据是逆序的,再压入s2再次逆序,那么从s2输出的数据就是正常顺序的,用这样的思路模拟一个队列。

需要注意的点是:模拟入队和出队的时候,需要判断s1是否已满,以及s2是否为空,当s1满的时候,无法入队,若s2非空,那么需要将s2元素全部出队后再将s1中所有元素压入s2中。

#include<iostream>
using namespace std;

int enQueue(Stack &s1,Stack &s2,int x)
{
	int t;//设置一个变量去存储进出栈的数据; 
	//s1满,再去判断s2是否为空,若为空就将s1中元素全部压入s2,再将x压入s1; 
	if(isfull(s1)){
		if(isEmpty(s2)){
			while(!isEmpty(s1)){
				pop(s1,t);
				push(s2,t);
			}
			push(s1,x);
			return 1;
		}
		//在s1已满的情况下,如果s2非空,那么此时队列已满,无法入栈,返回0; 
		else{
			cout <<"队列已满,无法入队"<<endl;
			return 0; 
		} 
	}
	//s1没有满,直接将x入栈就行; 
	else{
		push(s1,x);
		return 1; 
	}
 } 
 
 int deQueue(Stack &s1,Stack &s2,int &x){
 	int t;
 	//出队的时候,如果s2未空,直接出栈; 
 	if(isEmpty(s2)){
 		pop(s2,t);
 		return 1;
	 }
	 //若s2为空,再去判断s1中是否为空,如果非空,先全部压到s2中,再从s2中pop; 
	 else{
	 	//在s2为空的情况下,s1为空的话,那么此时队列为空,无法出队; 
	 	if(isEmpty(s1)){
	 		cout << "队列为空"<<endl; 
	 		return 0; 
		 } 
		 else{
		 	while(!isEmpty(s1)){
		 		pop(s1,t);
		 		push(s2,t);
			 }
		 	pop(s2,x);
		 	return 1;
		 }
	 } 
 }
 
 int isQueueEmpty(Stack s1,stack s2){
 	if(isEmpty(s1)&&isEmpty(s2)){
 		return 1;
	 }
	 else{
	 	return 0;
	 }
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值