沒注意看題,一開始把元素型別弄成char了,搞了好久都ac不了,換成int一次就ac了。
題意:即用兩個棧來模擬佇列,使兩個棧協作實現佇列的功能。
思路:1.第乙個棧為輸入棧,第二個棧為輸出棧,輸入棧比輸出棧要小。
2.棧滿條件:輸入棧滿了而輸出棧不為空,說明棧滿了,因為輸出棧還有元素的話,輸入棧的元素是不能搬到輸出棧的,這樣會造成順序混亂(輸出棧為空時連續多次將對個輸入棧棧頂元素搬到輸出棧這一情況除外)。
3.所以說,輸入棧的元素要搬到棧頂只能在一種條件下:就是輸出棧為空時,且輸入棧元素必須一次性地全部搬到輸出棧。
此外出棧入棧函式的傳入引數要用指標型,剛開始沒注意,就出錯了。
1 #include 2 #include3 #include 4
using
namespace
std;
6 typedef int
elementtype;
7struct
stack8;
13int isfull(stack*s)
1420
else
return0;
21}22int isempty(stack*s)
2328
else
return0;
29}30void push(stack*s, elementtype item)
3136
else
return;37
}38 elementtype pop(stack*s)
3942
intmain()
4356
else
5763
while (1)64
83push(s1, n);84}
85}86else
87push(s1, n);88}
89else
if (ch == 'd'
)9095else
if (!isempty(s2) && !isempty(s1))
9699
else
if(isempty(s1))
100
103else
if(isempty(s2))
104
109 cout << pop(s2) <110111
}112
}113
}114
115return0;
116 }
7 22 堆疊模擬佇列 25 分
題目鏈結 小容量棧 輸入棧 大容量棧 輸出棧 輸入時 小棧大棧都空時,優先放入小棧 如果小棧滿了,且大棧為空,就倒如大棧中 如果小棧滿了,且大棧已經倒過一次了,說明真的滿了,即此佇列的最大容量為小棧容量的兩倍 輸出時 如果小棧大棧都有資料,優先輸出大棧的資料 如果大棧空,而小棧有資料,則把小棧中的數...
3 8 堆疊模擬佇列 25 分
設已知有兩個堆疊s1和s2,請用這兩個堆疊模擬出乙個佇列q。所謂用堆疊模擬佇列,實際上就是通過呼叫堆疊的下列操作函式 int isfull stack s 判斷堆疊s是否已滿,返回1或0 int isempty stack s 判斷堆疊s是否為空,返回1或0 void push stack s,el...
堆疊 兩個棧模擬佇列
之前想的太複雜了,過分地考慮空間的利用率,使得邏輯非常複雜,簡直要 看了標準答案後,媽的如此簡單!答案思路 準備兩個棧a,b。a專門用於入隊,b專門用於出隊。當要入隊時,如果a沒有滿,那麼很正常地把元素壓入a。如果a已經滿了,如果b是空的,我們就把a的元素全部壓入b,這樣先入棧的元素跑到了b的頂端,...