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

時間 2021-09-02 20:52:45

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的公式似乎不太好辦。

如何讓IE9以下版本認識html5元素

一騎當後 每個瀏覽器都有一份清單列舉自己所支援的html元素。不在清單上的元素都將被視為未知元素。瀏覽器不會給未知元素設定任何樣式 不同瀏覽器對元素會有不同的預設樣式 在ie9之前的版本中,也不能對未知元素設定樣式。未知元素的dom也顯示不正確,ie會在dom中插入一個沒有子元素的空節點。所有你原本...

X Y Z M G五種元素分屬短週期,且原子序數依次增大X Z同主族,可形成離子化合物ZX Y M同主

x y z m g五種元素分屬三個短週期,且原子序數依次增大,x為主族元素,所以x是h元素 x z同主族,可形成離子化合物zx,y為主族元素,且z原子序數大於y原子序數,所以z是na元素 y m同主族,可形成my2 my3兩種分子,所以y是o元素,m是s元素,g是短週期主族元素,所以g是cl元素 不...

高中化學題,短週期元素A B C D的原子序數依次增大。A原子的最外層電子數是內層電子數的

選bca 原子的最外層電子數是內層電子數的 2 倍,說明a為碳 短週期元素 a b c d 的原子序數依次增大。元素 b 在同週期的主族元素中原子半徑最大,說明b為鈉 元素 c 的合金是日常生活中常用的金屬材料,說明c為鋁 d 位於第 via 族,說明d為硫 a.元素 a b 的氯化物分別為ccl4...