若讓元素5依次進棧,則出棧的可能性有哪些

2021-09-02 20:53:20 字數 4574 閱讀 4220

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...