#include <iostream> #include <vector> #include <stack> using namespace std; class Operation { public : vector<int> data; stack<int> iStack; vector<char> opers; vector<int> result; void inputData() { int temp; while(cin>>temp) { if(temp==0) break; else data.push_back(temp); } } void inputOpers() { char temp; while(cin>>temp) { if(temp=='E'||temp=='e') break; else if(temp=='i'||temp=='I'||temp=='o'||temp=='O') opers.push_back(temp); } } void showResult() { int j1=0, j2=0; cout<<"The pop sequence is:"; for(int i=0; i<opers.size(); i++) { if(opers[i]=='i'||opers[i]=='I') { if(j1<data.size())//當data裏的數據數量知足不了入棧操做時中止入棧 iStack.push(data[j1++]); } else if(opers[i]=='o'||opers[i]=='O') { if(!iStack.empty())//當堆棧爲空時中止出棧 { cout<<" "<<iStack.top(); result.push_back(iStack.top());//將出棧數據存到 result iStack.pop(); } } } if(result.empty())//result 爲空代表無數據出棧,輸出empty cout<<"Empty."; cout<<endl; } void clearData() { data.clear(); opers.clear(); result.clear(); while(!iStack.empty())// 堆棧無clear 用法。 iStack.pop(); } }; int main() { Operation myOp; int cases; cin>>cases; for (int i = 0; i < cases; i++) { myOp.clearData(); myOp.inputData(); myOp.inputOpers(); myOp.showResult(); } return 0; }
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 848 Solved: 545
[Submit][Status][Web Board]php
小明想深刻了解Stack(棧)的用法,因此他打算寫一個類來模擬一下。可是他沒有學過C++中強大的STL,因此他如今向你求助了。請幫他編寫一個類Operation,包括4個屬性:ios
1. vector<int> data:存儲用於仿真的數據。測試
2. stack<int> iStack:棧。spa
3. vector<char> opers:對棧的操做。blog
4. vector<int> result:存儲出棧的數據。遊戲
還有4個方法:ip
1. void inputData():讀取數據。ci
2. void inputOpers():讀取操做。get
3. void showResult():顯示出棧的數據序列。input
4. void clearData():清空全部的屬性值。
第1行N>0表示有N個測試用例。
每一個測試用例由兩行組成:
1. 第1行是若干個int類型的數據,以「0」做爲結束標識。注意:「0」不做爲輸入數據即Operation類中data成員的一個元素,只是用作結束標識。
2. 第2行是若干個英文字母,用'i'或'I'(字母I,不是數字1.)表示入棧操做,用‘o'或者'O’(字母O,不是數字0.)表示出棧操做,用'e'或者'E'表示輸入結束。可是小明很不仔細,這些字符序列中可能包括其餘字符。
輸出有N行,每一個測試用例產生一行輸出。
每行的格式爲:「The pop sequence is: 」,以後按照出棧順序顯示全部數據,這些數據兩兩之間用1個空格隔開,且最後沒有空格。若是沒有產生出棧數據,則顯示「Empty.」
6
1 2 3 4 5 6 7 8 -1 -2 -3 -4 -5 -6 -7 0
i I I I o O o c c c e
1 2 3 4 5 6 7 8 -1 -2 -3 -4 -5 -6 -7 0
o o o i i i i o o i i o o o o o o o o o o o o e
1 2 3 4 5 6 7 8 -1 -2 -3 -4 -5 -6 -7 0
c c c i c i i o o c c i i i i i i i i i i i o o o o o c e
1 2 3 4 5 6 7 8 -1 -2 -3 -4 -5 -6 -7 0
i i i i i i i i i i i i i i i i i i i i i i i i i i o o o o o e
1 2 3 4 5 6 7 8 -1 -2 -3 -4 -5 -6 -7 0
o o o o o o o c c c c c c c c e
1 2 3 4 5 6 7 8 -1 -2 -3 -4 -5 -6 -7 0
i i i i i i i i i i i i i i e
The pop sequence is: 4 3 2
The pop sequence is: 4 3 6 5 2 1
The pop sequence is: 3 2 -6 -5 -4 -3 -2
The pop sequence is: -7 -6 -5 -4 -3
The pop sequence is: Empty.
The pop sequence is: Empty.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
int main() { Operation myOp; int cases; cin>>cases; for (int i = 0; i < cases; i++) { myOp.clearData(); myOp.inputData(); myOp.inputOpers(); myOp.showResult(); } return 0; } |