題目描述ios
模擬STL stack類設計實現你的stack類,該類需具備入棧,出棧,判棧空,取棧頂元素等功能;利用該類實現本題要求。測試
輸入描述spa
分別構造兩個空棧,再讀入若干對整數v、x; 1<=v<=2; 將元素x入第v個棧設計
輸出描述code
最後將兩個棧中元素出棧,並輸出;每一個棧中元素佔一行,元素間以空格分隔blog
樣例輸入ci
1 100 2 200 1 300 2 400 1 50 1 60 2 80
樣例輸出it
60 50 300 100 80 400 200
1 #include<iostream> 2 using namespace std; 3 4 class Stack{ 5 private: 6 int list[100]; 7 int top; 8 public: 9 Stack(); 10 void push(const int &item); 11 int Pop(); 12 bool isEmpty() const; 13 }; 14 15 Stack::Stack():top(-1){} 16 17 void Stack::push(const int &item) 18 { 19 list[++top] = item; 20 } 21 22 int Stack::Pop() 23 { 24 return list[top--]; 25 } 26 27 bool Stack::isEmpty() const 28 { 29 return top == -1; 30 } 31 32 int main() 33 { 34 Stack s1; 35 Stack s2; 36 int k,x; 37 while(cin>>k>>x) 38 { 39 if(k == 1) 40 { 41 s1.push(x); 42 } 43 if(k == 2) 44 { 45 s2.push(x); 46 } 47 } 48 while(!s1.isEmpty()) 49 { 50 cout<<s1.Pop()<<" "; 51 } 52 cout<<endl; 53 while(!s2.isEmpty()) 54 { 55 cout<<s2.Pop()<<" "; 56 } 57 58 }
代碼如上,棧只是很簡單地實現了一下。io
這道題讓我糾結的是,樣例輸出中,沒有輸出結束的標誌,也沒有一開始讓你輸入一個數據,表示本次輸入有幾組數據。因此一開始我就簡單的看了一下輸入樣例中有7組數據,因此用for(int i=0;i<7;i++)來循環輸入數據,因此第一組測試數據是沒問題的,但其餘組的測試數據,由於不是7組了,因此所有錯誤。class
而後不知道該怎麼操做了,還覺得是這道題出的有問題,但我請教了一下別人,說是用
while(cin>>x)
{
……
}
我把代碼改動了一下,測試數據就都經過了。
由於之前寫過幾道OJ的題,因此知道這種寫法,能夠來用來輸入多組數據。
但背後的機制我應該仍是沒搞明白,就算是這樣寫,測試數據不也仍是那幾個嗎,也沒有輸入讓while循環結束的標誌,可能有?但我不知道?
不知道爲何,但仍是AC了。
因此先把這個問題思路記着,之後知道緣由的話,再來補充吧。
多是測試數據的最後有一個文件結束的標識符,while(cin>>x)識別到了這個,因此循環就結束了。