Description
堆棧是一種基本的數據結構。堆棧具有兩種基本操作方式,push 和 pop。push一個值會將其壓入棧頂,而 pop 則會將棧頂的值彈出。現在我們就來驗證一下堆棧的使用。
Input
首先輸入整數t(1 <= t <= 10),代表測試的組數,以后是 t 組輸入。
對於每組測試數據,第一行輸入兩個正整數 m(1 <= m <= 100)、n(1 <= n <= 1000),其中m代表當前棧的最大長度,n代表本組測試下面要輸入的操作數。 而后的 n 行,每行的第一個字符可能是'P’或者'O’或者'A’;如果是'P’,后面還會跟着一個整數,表示把這個數據壓入堆棧;如果是'O’,表示棧頂元素出棧;如果是'A',表示詢問當前棧頂的值'。
Output
對於每組測試數據,根據其中的命令字符來處理堆棧;
(1)對所有的'P'操作,如果棧滿輸出'F',否則完成壓棧操作;
(2)對所有的'A'操作,如果棧空,則輸出'E',否則輸出當時棧頂的值;
(3)對所有的'O'操作,如果棧空,則輸出'E',否則輸出棧頂元素的值,並讓其出棧;
每個輸出占據一行,每組測試數據(最后一組除外)完成后,輸出一個空行。
Sample Input
2
5 10
A
P 9
A
P 6
P 3
P 10
P 8
A
P 2
O
2 5
P 1
P 3
O
P 5
A
Sample Output
E
9
8
F
8
3
5
Hint
建議: 用串的方式(%s)讀入操作字符。
////利用count來記錄棧中元素個數的總和 #include<iostream> #include<stack> #include<stdio.h> #include<string.h> using namespace std; int main() { int a,n,t,m,count; char x[10]; scanf("%d",&t); while(t--) { stack<int>s; scanf("%d%d",&m,&n); getchar(); count=0; while(n--) { scanf("%s",&x[0]); if(x[0]=='A') { if(s.empty()) printf("E\n"); else printf("%d\n",s.top()); } if(x[0]=='P') { scanf("%d",&a); getchar(); if(count==m) { printf("F\n"); } else { s.push(a); count++; } } if(x[0]=='O') { if(s.empty()) printf("E\n"); else { printf("%d\n",s.top()); s.pop(); count--; } } } printf("\n"); } return 0; }