1樓:匿名使用者
不一定要一次性全部都進棧,也不一定一次性都出棧!
可以push(1) pop(1) push(2) push(3) pop(3) push(4) pop(4) pop(2) push(5) pop(5)
也可以有其他n多種 push 跟 pop 的順序 答案也就有n種了 。一樓的答案蠻準的 (全不全我就不知道了)
至於有多少種答案也就是把5次 push 跟 5次pop 進行排序 ,而且 pop時要保證棧不是空的!
2樓:
#include
#include
#define element_type int
/* 列印所有可能的出棧順序
引數:queue 已知的入棧順序
queue_size 棧 queue 的大小
遞迴使用引數:
poped_queue 出棧順序。poped_queue[i]=j 表示元素 queue[j] 第 i 個出棧。可以初始為 null。
poped_queue_size poped_queue 棧的大小。必須初始為 0 。
total 統計出棧順序總數。可以初始為 null。或者初始為一個變數的地址,該變數的值必須為 0。
*/ void printallpoporder(element_type queue,int queue_size,
int poped_queue,int poped_queue_size,int *total)}}
}/*"所有可能出棧的順序總數" ,其實是一個卡特蘭數(catalannumber)。
設棧的元素數目為 n , 那麼"所有可能出棧的順序總數"為:
2n!/(n+1)/n!
也就是第 n 個卡特蘭數。
引數:n 卡特蘭數的編號(從1開始)
返回:第 n 個卡特蘭數
*/int getcatalannumber (int n)
int main(int argc, char *argv)
;int queue_size = sizeof(queue)/sizeof(queue[0]);
int total_1=0,toatl_2=0;
// 輸出所有可能的出棧順序
printf("total = %d\n",total_1);
// 呼叫 printallpoporder 其實已經通過變數 total_1 得到了出棧順序的總數。
// 下面用公式(卡特蘭數)計算所有可能出棧順序的總數。
toatl_2 = getcatalannumber(queue_size);
printf("total = %d\n",toatl_2);
return 0;}/*
1 2 3 4 5
1 2 3 5 4
1 2 4 3 5
1 2 4 5 3
1 2 5 4 3
1 3 2 4 5
1 3 2 5 4
1 3 4 2 5
1 3 4 5 2
1 3 5 4 2
1 4 3 2 5
1 4 3 5 2
1 4 5 3 2
1 5 4 3 2
2 1 3 4 5
2 1 3 5 4
2 1 4 3 5
2 1 4 5 3
2 1 5 4 3
2 3 1 4 5
2 3 1 5 4
2 3 4 1 5
2 3 4 5 1
2 3 5 4 1
2 4 3 1 5
2 4 3 5 1
2 4 5 3 1
2 5 4 3 1
3 2 1 4 5
3 2 1 5 4
3 2 4 1 5
3 2 4 5 1
3 2 5 4 1
3 4 2 1 5
3 4 2 5 1
3 4 5 2 1
3 5 4 2 1
4 3 2 1 5
4 3 2 5 1
4 3 5 2 1
4 5 3 2 1
5 4 3 2 1
total = 42
total = 42
ps;"@找個名字真難吶" 列出了34個,少了8個,它們是:
12453
13425
13452
13542
14352
14532
21354
21453*/
若讓元素1,2,3,4,5依次進棧,則出棧次序不可能出現?
3樓:鄰冰
答案是c。
根據棧的後進先出的性質,棧頂元素可能是1,2,3,4,5也就是出棧序列的第一個元素可能為1,2,3,4,5對於5,4,3,1,2,我解釋下,其他可以類推:
若想3先出棧,那麼必須1和2已經進棧,然後3進棧,3再出棧(序列:3),而【此時棧的棧頂元素】為2,所以第二個出棧的元素不可能是1,而只能是2,所以此時的出棧序列必為:321
以此類推,出棧次序不可能出現c.4,3,1,2,5
出棧順序所有可能:
12345,12354,12435,12543,13245,13254,14325,15432
21345,21435, 21543,23145,23154,23415,23451,23541,24315,24351,24531 25431
32145 32154 32415 32451 32541 34215 34251 34521 35421
43215 43251 43521 45321
54321
4樓:牙刷的悲傷
你同學說的是錯的,棧的規則是先進後出,吐過剛進去就出來,可以得到1,2,3,4,5.
c錯的原因是因為4,3先出來的,表示1剛開始沒有出來,所以1不可能比2先出來。。
5樓:娛樂嗶嗶姬
重點:五個元素可以不是一次性進棧、一次性出棧。
a:是五個元素一次性進棧,即1,2,3,4,5進棧。然後一次性出棧即5,4,3,2,1。可能
b:先讓1,2進棧,然後出棧即2,1;再然後讓3,4,5進棧,出棧為5,4,3;即總出棧順序為2,1,5,4,3。可能
d:先讓1,2進棧,然後出棧2;再讓3進棧,又讓3出棧;讓4,5進棧,讓後出棧剩餘元素5,4,1;即總出棧順序為2,3,5,4,1。可能
c:要滿足題目條件1,2,3,4,5順序進棧,根據出棧順序先為4,3,則剩下三個元素的出棧順序可能性有:215,521。
即以4,3開頭的總出棧的可能有:43215、43521。不可能
選c
6樓:匿名使用者
棧是先進後出,題中c的進法是1進2進3進4進4出3出後應該是2出,不是1出
7樓:勤奮的始末
棧是後進先出,c1,2,3,4進棧4出棧3出棧1不可能比2先出棧
n 個元素順序入棧,則可能的出棧序列有多少
8樓:悽清的小白鼠
我來補充吧,其實進棧出棧是可以同時進行的,並不一定要全部進去再出來,可以先進一部分再出來,所以關鍵是從那個開始先出
1.第一個先出的為d 則必須為dcba
2.第一個出來的是c則可為 cdba (abc依次進然後c出來d進去再出來然後ba出來) 也可為cbad (cb出來d進 、出,a出)也可為cbda 就是c之前的ab必須先b再a 因為是a先進而b是後進(注意是沒有出去)
3、同理第一個為b時可以為 bcda、bdca、bacd、badc、bcad(bdac是不行的因為要d排第二必須c進去而沒有出來也就是說c必須先a而出)
9樓:憑實陀雪
n個資料依次入棧,出棧順序種數的遞推公式如下:
f(n)=∑(f(n-1-k)*fk);其中k從0到n-1已知f0=1,
f1=f0*f0=1
f2=f1*f0+f0*f1=2
f3=f2*f0+f1*f1+f0*f2=5……證明的話,對於n個資料,我只看第一個資料的出入棧順序:
第一個資料入棧到出棧之間可以包含0,1,2…n-1個資料的出入棧,相應的,第一個資料出棧之後,還有n-1,n-2…2,1,0個資料需要出入棧
根據組合數學裡面的乘法原理,需要把第一個資料出棧前後的種數相乘根據加法原理,需要把第一個資料出入棧的n種方式全加起來於是就得到了那個遞推公式,不過,要找出一個直接計算fn的公式似乎不太好辦。
李若依好,還是李若伊好
李若伊 的姓名復綜合評分 79 滿分製為100分,bai60分及格 李 du,zhi 繁體 李,拼音 l 五行 火,筆劃 dao7,姓名學解釋 吉 若 繁體 若,拼音 ru 五行 木,筆劃 11,姓名學解釋 福祿雙收,孤獨格,刑偶傷子,中年潦倒,晚年吉祥。吉 伊 繁體 伊,拼音 y 五行 土,筆劃 ...
成語若水依藍是什麼意思,芯夢依藍是什麼意思
若水依藍 不是成語,意思是若水依舊是藍色的。詞目 若水 拼音 ru shu 釋義 古水名。即今雅礱江。其與金沙江合流後的一段,古時亦稱若水。示例 1 呂氏春秋 古樂 帝顓頊生自若水,實處空桑,乃登為帝。2 史記 五帝本紀 黃帝居軒轅之丘,而娶於西陵之女,是為嫘祖。嫘祖為黃帝正妃,生二子,其後皆有天下...
個棧的初始狀態為空。首先將元素5,4,3,2,1依次入棧
第一次退棧出來的是1,棧中的元素為5,4,3,2,再將元素a,b,c,d 依次入 版棧棧中元素為 5,權4,3,2,a,b,c,d,然後出棧,先進後出,可知序列為d,c,b,a,2,3,4,5加上先前出的則所有元素退棧 包括中間退棧的元素 的順序為1dcba2345 看看計算機二級access中的a...