棧與佇列 課後練習1

2021-10-05 05:17:32 字數 2206 閱讀 2684

判斷棧輸出順序正確與否

問題描述

給定乙個棧,其中最多儲存m個資料。將n個資料以1,2,3,…,n的順序壓棧,然後再隨機彈棧。判斷一下哪些是有可能的彈棧順序,而哪些不是。例如m是5,n是7,我們可以得到1, 2, 3, 4, 5, 6, 7的彈棧順序,而不能得到3, 2, 1, 7, 5, 6, 4這樣的彈棧順序。(m,n<=1000)

輸入說明

輸入包含了一種情況下的測試資料。在每種情況下,有三組輸入資料:

第一組列在首行,包含了三個資料:棧的最大容量m,壓棧資料長度n,要驗證的彈棧序列個數k。

第二組為壓棧資料:n個整數s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。

第三組為k行資料,每行包括了乙個需要驗證的彈棧序列(含n個資料)。

同行資料間以空格隔開。

輸出說明

輸出應該包括k行,包行了對每個輸入的驗證序列,輸出的乙個判斷結果。如果這個彈出序列可能發生,就輸出「yes」,否則就輸出「no」。

輸入樣例

5 7 5

1 2 3 4 5 6 7

1 2 3 4 5 6 7

3 2 1 7 5 6 4

7 6 5 4 3 2 1

5 6 4 3 7 2 1

1 7 6 5 4 3 2

輸出樣例

yesno

noyes

no思路:

1.(以測試樣例為例)棧的容量——5;

入棧資料——1-2-3-4-5-6-7;

測試的彈棧資料(1)——1-2-3-4-5-6-7;

測試的彈棧資料(2)——3-2-1-7-5-6-4;

2.先設定兩個陣列s,n;s存放入棧的資料,n存放測試的彈棧資料;

3.設定乙個資料棧,使s中的元素依此入棧再彈棧,將彈出的棧頂元素依此與n中的資料比較。如果棧頂元素與n中相應資料相同,則繼續進行入棧再彈棧的操作。

例如(1):入棧-1,n[0]-1——相同;將1彈出

入棧-2,n[1]-2——相同;將2彈出

…依此類推,直到所有n中的所有資料測試結束。

結束時棧為空棧。

(2):入棧-1,n[0]-3——不相同,繼續入棧;

入棧-2,n[0]-3——不相同,繼續入棧;

入棧-3,n[0]-3——相同;將3彈出;此時棧不為空,繼續彈棧

彈棧-2,n[1]-2——相同;將2彈出;棧不為空,繼續彈棧

彈棧-1,n[2]-1——相同;將1彈出;棧空,入棧

入棧-4,n[3]-7——不相同,繼續入棧;

入棧-5,n[3]-7——不相同,繼續入棧;

入棧-6,n[3]-7——不相同,繼續入棧;

入棧-7,n[3]-7——相同;將7彈出;此時棧不為空,繼續彈棧;

彈棧-6,n[4]-5——不相同,繼續入棧;

但是7個元素已經依次入棧結束了,所以結束,此時棧不為空。

4.觀察以上例子,得出迴圈條件和判斷依據如下:

1.棧未滿,且所有資料沒有全部入棧時,執行操作。

2.將元素依次入棧,與n相應元素對比,相同則彈棧,不相同則入棧;

3.條件1不滿足時,操作結束,若此時棧為空,則說明彈棧順序合理,否則彈棧順序不合理。

**實現:

#include

#include

typedef

struct stack

st;//定義結構體——棧

st* tops;

st*setnulls

(st* s)

//置空棧

st*pushs

(st* tops,

int e)

//入棧——返回棧頂元素

intpops

(st* top)

}//刪除並返回棧頂元素

intjudge

(st* tops,

int n,

int y,

int m,

int s)

else}if

(tops->top ==-1

)return1;

else

return0;

}int

main()

h[i]

=judge

(tops, n, y, m, s);}

for(i =

0; i < k; i++

)return0;

}

課後練習 2 3

一.a.250000 b.2046 c.n 1 d.n 4 n 1 2 e.n 1 n 2 1 2n 1 3 f.pow 3,n 1 3 2 g.pow n 1 n 2,2 h.1 1 n 1 二.a.n的四次方 b.log n c.2的n次方乘n d.n n 三.用第一種方法 加減運算 n n 1...

課後練習 十八

9 10 匯入restaurant 類 將最新的restaurant 類儲存在乙個模組中。在另乙個檔案中,匯入restaurant 類,建立乙個restaurant 例項,並調 用restaurant 的乙個方法,以確認import 語句正確無誤。分成多個模組,不同模組進行呼叫 restaurant...

課後練習 十九

10 1 python學習筆記 在文字編輯器中新建乙個檔案,寫幾句話來總結一下你至此學到的python知識,其中每一行都以 in python you can 打頭。將這個檔案命名為 learning python.txt,並將其儲存到為完成本章練習而編寫的程式所在的目錄中。編寫乙個程式,它讀取這個...