棧的基本操作


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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM