筆試題:
實現
//利用棧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;
}