zoukankan      html  css  js  c++  java
  • 堆栈的使用【ACM】

    题目描述:

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

    输入:

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

    输出:

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

    样例输入:

    3

    A

    P 5

    A

    4

    P 3

    P 6

    O

    A

    0

    样例输出:

    E

    5

    3

     

    结题思路:

      本题是常规栈操作题,按照题目要求读取字符,根据字符做出操作,有几点需要注意的地方:

      1、每组数据第一行为int型,表示操作次数,当为0时要停止。

      2、当用%c读取每行的第一个操作数时,前面要加空格如 scanf(“ %c”,&tmp);这样可以过滤掉之前输入流中的空格或者换行。如果使用%s读数据就不用这么麻烦,只要考虑字符串第一位的值即可。

      3、需要着重注意,当栈为空时不能进行退栈操作,会发生错误,每次进行退栈时要检查栈是否为空,只有当不为空时才能退栈。

     

    解题代码:

    #include<stack>
    #include<stdio.h>
    using namespace std;
    stack<int> buf;
    int main(){
        //freopen("test.txt","r",stdin);
        int n;
        char s[10];
        //scanf("%d",&n);
        while(scanf("%d",&n)!=EOF&&n!=0){
            while(!buf.empty()) buf.pop();
            //stack<char> buf;
            for(int i=0;i<n;i++){
                //char tmp;
                int data;
                scanf("%s",s);
                if(s[0]=='P'){
                    scanf("%d",&data);
                    //printf("%c
    ",data);
                    buf.push(data);
                }
                else if(s[0]=='O'){
                    if(!buf.empty())
                        buf.pop();
                }
                else if(s[0]=='A'){
                    if(!buf.empty())
                        printf("%d
    ",buf.top());
                    else
                        printf("E
    ");
                }
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    Android学习之多线程开发总结<二>
    Android学习之多线程开发总结<一>
    Android代码模版整理<一>
    Android学习之Bluetooth开发总结<续3>
    Android学习—自定义组件
    Android学习之解析XML
    Android学习—自定义对话框Dialog
    Android学习之Bluetooth开发总结<续2>
    Android学习之Bluetooth开发总结<续>
    .Net Core 发布项目时出现警告提示“不建议指定此包的版本”的解决办法
  • 原文地址:https://www.cnblogs.com/bramblewalls/p/6657699.html
Copyright © 2011-2022 走看看