題目描述 堆棧是一種基本的數據結構。堆棧具有兩種基本操作方式,push 和 pop。Push一個值會將其壓入棧頂,而 pop 則會將棧頂的值彈出。現在我們就來驗證一下堆棧的使用。 輸入 對於每組測試數據,第一行是一個正整數 n,0<n<=10000(n=0 結束)。而後的 n 行,每行的第一個字符可能是'P’或者'O’或者'A’;如果是'P’,後面還會跟著一個整數,表示把這個數據壓入堆棧;如果是'O’,表示將棧頂的值 pop 出來,如果堆棧中沒有元素時,忽略本次操作;如果是'A’,表示詢問當前棧頂的值,如果當時棧為空,則輸出'E'。堆棧開始為空。 輸出 對於每組測試數據,根據其中的命令字符來處理堆棧;並對所有的'A’操作,輸出當時棧頂的值,每個占據一行,如果當時棧為空,則輸出'E’。當每組測試數據完成後,輸出一個空行。 樣例輸入 5 P 75 O O P 60 A 7 A O P 73 P 49 A O P 3 0 樣例輸出 60 E 49 提示 [+] *** 提示已隱藏,點擊上方 [+] 可顯示 *** 來源 2011年吉林大學計算機研究生機試真題 注意: 每行的第一個字符可能是'P’或者'O’或者'A’之後可能有多余空格,用getchar()可能會出錯。 [cpp] /********************************* * 日期:2013-3-11 * 作者:SJF0115 * 題號: 天勤OJ 題目1083: 堆棧的使用 * 來源:http://acmclub.com/problem.php?id=1083 * 結果:AC * 來源:2011年吉林大學計算機研究生機試真題 * 總結: **********************************/ #include<iostream> #include<string.h> #include<stack> #include<stdio.h> using namespace std; int main(){ int N,i,num; char op[5]; while(scanf("%d",&N) != EOF && N != 0){ getchar(); stack<char> Stack; for(i = 0;i < N;i++){ scanf("%s",&op); //如果是'P’,後面還會跟著一個整數,表示把這個數據壓入堆棧; if(op[0] == 'P'){ scanf("%d",&num); Stack.push(num); } //如果是'O’,表示將棧頂的值 pop 出來,如果堆棧中沒有元素時,忽略本次操作; else if(op[0] == 'O'){ if(!Stack.empty()){ Stack.pop(); } } //如果是'A',表示詢問當前棧頂的值,如果當時棧為空,則輸出'E'。 else if(op[0] == 'A'){ if(Stack.empty()){ printf("E\n"); } else{ printf("%d\n",Stack.top()); } } }//for printf("\n"); }//while return 0; } /********************************* * 日期:2013-3-11 * 作者:SJF0115 * 題號: 天勤OJ 題目1083: 堆棧的使用 * 來源:http://acmclub.com/problem.php?id=1083 * 結果:AC * 來源:2011年吉林大學計算機研究生機試真題 * 總結: **********************************/ #include<iostream> #include<string.h> #include<stack> #include<stdio.h> using namespace std; int main(){ int N,i,num; char op[5]; while(scanf("%d",&N) != EOF && N != 0){ getchar(); stack<char> Stack; for(i = 0;i < N;i++){ scanf("%s",&op); //如果是'P’,後面還會跟著一個整數,表示把這個數據壓入堆棧; if(op[0] == 'P'){ scanf("%d",&num); Stack.push(num); } //如果是'O’,表示將棧頂的值 pop 出來,如果堆棧中沒有元素時,忽略本次操作; else if(op[0] == 'O'){ if(!Stack.empty()){ Stack.pop(); } } //如果是'A',表示詢問當前棧頂的值,如果當時棧為空,則輸出'E'。 else if(op[0] == 'A'){ if(Stack.empty()){ printf("E\n"); }www.2cto.com else{ printf("%d\n",Stack.top()); } } }//for printf("\n"); }//while return 0; }