/***************************************************************************
* @file name: :StacksSimulateQueue
* @brief :两个栈实现队列的功能
* @author :[email protected]
* @date :2024/04/26
* @version 1.0 :V1.0
* @property :None
* @note :None
* CopyRight (c) 2023-2024 [email protected] All Right Reseverd
*****************************************************************************/
//利用栈s1和s2实现队列,栈的思想是“后进先出”,队列的思想是“先进先出”,可以选择把栈s1作为入队缓存,把栈s2作为出队缓存
//入队
bool enQueue(s1,s2,int x)
{
int temp; //用于存储出栈的元素的值
//1.判断栈s1是否已满,此时分为两种情况(满了 or 未满)
if (s1->top + 1 >= maxSize)
{
//说明栈s1已满,此时分为两种情况(栈s2空 or 栈s2不空)
if ( isEmpty(s2) )
{
//此时栈s2为空,所以需要把栈s1的元素依次出栈到s2中
while( ! isEmpty(s1) )
{
pop(s1,&temp); //把出栈元素暂时存储在temp中
push(s2,temp); //把变量temp中的元素入栈到s2
}
push(s1,x); //此时栈s1为空,所以可以把元素x入栈到s1
return true;
}
else
{
//此时栈s2不空,所以无法入队
return false;
}
}
else
{
//此时栈s1未满,所以可以把元素x入栈到s1中
push(s1,x);
}
return true;
}
//判断队列为空
int isQueueEmpty(s1,s2)
{
if (isEmpty(s1) && isEmpty(s2))
{
return 1;
}
else
return 0;
}
//出队
bool enQueue(s1,s2,&x)
{
int temp; //为了存储出栈的元素
//1.判断队列是否为空,此时分为两种情况(空 or 不空)
if (isQueueEmpty(s1,s2))
{
return false;
}
else
{
//说明队列不空,此时又分为两种情况(栈s2空 or 栈s2不空)
if ( !isEmpty(s2) )
{
//说明栈s2不空,则直接把元素出栈
pop(s2,&x);
}
else
{
//说明栈s2为空,此时需要把栈s1的元素依次出栈到s2中
while( ! isEmpty(s1) )
{
pop(s1,&temp); //把出栈元素暂时存储在temp中
push(s2,temp); //把变量temp中的元素入栈到s2
}
pop(s2,&x);
}
}
return true;
}
标签:return,temp,Imitate,s2,s1,元素,Queue,出栈,Stacks
From: https://www.cnblogs.com/hhail08/p/18160788