zoukankan      html  css  js  c++  java
  • 数据结构实验之栈与队列八:栈的基本操作

    Problem 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)读入操作字符。

    Source

     
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAXSIZE 101
    
    typedef struct
    {
        int data[MAXSIZE];
        int top;
    } SeqStack;
    
    void Push(SeqStack *s, int num, int m)
    {
        if (s->top < m-1)
        {
            s->top++;
            s->data[s->top] = num;
        }
        else
        {
            printf("F
    ");
        }
    }
    
    void Pop(SeqStack *s)
    {
        if (s->top != -1)
        {
            printf("%d
    ", s->data[s->top]);
            s->top--;
        }
        else
        {
            printf("E
    ");
        }
    }
    
    void GetTop(SeqStack *s)
    {
        if (s->top!=-1)
            printf("%d
    ", s->data[s->top]);
        else
            printf("E
    ");
    }
    
    int main()
    {
        int t, m, n;
        int a;
        SeqStack s;
        scanf("%d", &t);
        while(t--)
        {
            s.top = -1;
            scanf("%d%d", &m, &n);
            while(n--)
            {
                char ch;
                getchar();  // 用于接收回车
                ch = getchar();
                if(ch == 'P')
                {
                    scanf("%d", &a);
                    Push(&s, a, m);
                }
                else if (ch == 'O')
                {
                    Pop(&s);
                }
                else if (ch == 'A')
                {
                    GetTop(&s);
                }
            }
            if (t != 0)
                printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    容器 list
    迭代器
    排序
    extern "C"
    FZU2127
    HDU1102--最小生成树
    HDU1102(最小生成树Kruskal)
    并查集详解(转自一个很有才的大神)膜拜
    C# switch
    Dijkstra(歪果仁的名字真是长。。。)
  • 原文地址:https://www.cnblogs.com/sugerandmaster/p/11536569.html
Copyright © 2011-2022 走看看