判斷棧輸出順序正確與否
問題描述
給定乙個棧,其中最多儲存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,並將其儲存到為完成本章練習而編寫的程式所在的目錄中。編寫乙個程式,它讀取這個...