九度oj 题目1108:堆栈的使用

来源:互联网 发布:淘宝靠谱的宠物店 编辑:程序博客网 时间:2024/06/05 04:12

链接

http://ac.jobdu.com/problem.php?pid=1108


题目描述:

    堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。

输入:

     对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束)。而后的 n 行,每行的第一个字符可能是'P’或者'O’或者'A’;如果是'P’,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是'O’,表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作;如果是'A’,表示询问当前栈顶的值,如果当时栈为空,则输出'E'。堆栈开始为空。

输出:

    对于每组测试数据,根据其中的命令字符来处理堆栈;并对所有的'A’操作,输出当时栈顶的值,每个占据一行,如果当时栈为空,则输出'E’。当每组测试数据完成后,输出一个空行。

样例输入:
3AP 5A4P 3P 6O A0
样例输出:
E53
分析

很简单,就是堆栈stl的使用

需加载的头文件:

#include<stack>
using namespace std;

主要的方法有如下:     

                          empty() 堆栈为空则返回真

                    pop() 移除栈顶元素(不会返回栈顶元素的值) 
                    push() 在栈顶增加元素
                    size() 返回栈中元素数目
                    top() 返回栈顶元素


ac代码

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <queue>
#include <map>
#include <stack>
#define INF 2<<20
using namespace std;
int main()
{
    int T,temp;
    char c;
    stack <int> my;
    while(cin >> T &&T)
    {
        for(int i=0;i<T;i++)
        {
           scanf(" %c",&c);
           if(c=='O')
           {
                if(!my.empty())
                    my.pop();
           }
           else if(c=='A')
           {
                if(!my.empty())
                {
                    temp = my.top();
                    printf("%d\n",temp);
                }
                else
                    printf("E\n");
           }
           if(c=='P')
           {
                scanf("%d",&temp);
                my.push(temp);
           }
        }
        while(!my.empty())
            my.pop();
        printf("\n");
    }
    return 0;
}

0 0
原创粉丝点击