C语言笔试题:利用两个栈s1和s2来模拟一个队列
请利用两个栈s1和s2来模拟一个队列,假设栈中元素为int 型,栈中元素最多为 maxSizc。入队:栈的3个运算定义如下。
push(ST,x):元素x入 ST 栈。
pop(ST,&x):ST栈顶元素出栈,赋给变量x。
isEmpty(ST):判断 ST 栈是否为空。
如何利用栈的运算来实现该队列的3个运算:enQueue(元素入队列)、deQueue(元素出队列)、isQueueEmpty(判断队列是否为空,空返回1,不空返回0)。

// 利用栈s1和s2模拟一个队列,栈的思想是先进后出,队列的思想是后进先出,可以把s1作为入队,s2作为出队
// 入队
bool Enqueue(s1,s2,int x)
{
int temp; // 用于存储出栈元素的值
// 判断s1是否已满,此时分两种情况(满 or 不满)
if( s1->top + 1 == maxSizc )
{
// s1已满,此时有两种情况(栈s2空 or 栈s2不空)
// 1.栈s2空
if ( isEmpty(s2) )
{
// 把栈s1元素依次入栈s2
while(!isEmpty(s1))
{
pop(s1,&temp); // 把栈s1元素暂存temp中
push(s2,temp); // 把temp中的元素入栈到s2
}
push(s1,x); // 入栈到s1
return true;
}else // 2.栈s2不空
{
return false;
}
}else // 栈s1不满
{
push(s1,x); // 直接把x入栈到s1
}
return true;
}
// 出队
bool Dequeue(s1,s2,&x)
{
int temp; // 用于存储出栈元素
// 判断队列是否为空,此时分两种情况(空 or 不空)
if ( isQueueEmpty(s1,s2) )
{
return false;
}else
{
// 队列不空,此时分两种情况(栈s2空 or 栈s2不空)
if ( !isEmpty(s2) )
{
pop(s2,&x);
}else
{
while(!isEmpty(s1))
{
pop(s1,&temp);
push(s2,temp);
}
pop(s2,&x)
}
}
return true;
}

浙公网安备 33010602011771号