• 九度OJ 1108:堆栈的使用 (堆栈)


    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:6705

    解决:1974

    题目描述:

        堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,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
    来源:
    2011年吉林大学计算机研究生机试真题

    思路:

    基本的堆栈数据操作。


    代码:

    #include <stdio.h>
    #include <string.h>
     
    #define N 10000
     
    int stack[N];
    int top;
     
    void init()
    {
        top = 0;
    }
     
    int notEmpty()
    {
        if (top <= 0)
            return 0;
        else
            return 1;
    }
     
    int push(int x)
    {
        if (top < N)
        {
            stack[top++] = x;
            return 1;
        }
        return 0;
    }
     
    int pop(int *x)
    {
        if (notEmpty())
        {
            *x = stack[--top];
            return 1;
        }
        else
            return 0;
    }
     
    int printTop()
    {
        if (notEmpty())
        {
            printf("%d
    ", stack[top-1]);
            return 1;
        }
        else
        {
            printf("E
    ");
            return 0;
        }
    }
     
    int main(void)
    {
        int n, i;
        char op[2];
        int x;
     
        while (scanf("%d", &n) != EOF && n)
        {
            init();
            for (i=0; i<n; i++)
            {
                scanf("%s", op);
                if (op[0] == 'A')
                    printTop();
                else if (op[0] == 'P')
                {
                    scanf("%d", &x);
                    push(x);
                }
                else if (op[0] == 'O')
                    pop(&x);
                //for (int j=0; j<top; j++)
                //  printf("%d	", stack[j]);
                //printf("
    ");
            }
            printf("
    ");
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1108
        User: liangrx06
        Language: C
        Result: Accepted
        Time:10 ms
        Memory:952 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    c语言中输出char类型所占据的位数(因编译器而异)
    C语言中输出不同变量类型的长度(单位为字节,1字节等于8位)
    C语言中作用域
    python 中字符串 内置函数 find
    python 中字符串拆分可直接赋值给变量名(列表中的元素可以直接赋值给变量)
    telnet协议
    LeetCode 图解 | 37.解数独
    新年锦鲤!自费送128G的 iPhone 11 !
    计算机领域有哪些常见的比赛
    Git 使用教程:最详细、最傻瓜、最浅显、真正手把手教!(万字长文)
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083924.html
Copyright © 2020-2023  润新知