資料結構(筆試題-棧(入棧出棧)

手机没电發表於2024-04-26

筆試題:



實現


//利用棧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;
}

相關文章