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)。

image-20250508143505646

// 利用栈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;
}
posted @ 2025-05-09 14:40  九思0404  阅读(16)  评论(0)    收藏  举报