数据结构实验之栈与队列八:栈的基本操作

来源:互联网 发布:像素人物制作软件 编辑:程序博客网 时间:2024/06/10 09:49

数据结构实验之栈与队列八:栈的基本操作

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',否则输出栈顶元素的值,并让其出栈;
每个输出占据一行,每组测试数据(最后一组除外)完成后,输出一个空行。

Example Input

25 10AP 9AP 6P 3P 10P 8AP 2O2 5P 1P 3OP 5A

Example Output

E98F835
-------------------------------------------------------------------------------------------------------------------------
#include<stdio.h>#include<stdlib.h>typedef int elemtype;typedef int status;int MAXSIZE;#define OVERFLOW -2#define another 50#define true 1#define false 0int a[10086];int b[10086];typedef struct{    elemtype *base;    elemtype *top;    int stacksize;}Sqstack;status isEmpty(Sqstack &S){    if(S.top == S.base)        return true;    else        return false;}status fullStack(Sqstack &S){    if(S.top-S.base >= S.stacksize)        return true;    else        return false;}elemtype getTop(Sqstack &S){    if(S.top == S.base) return false;    return *(S.top-1);}void initStack(Sqstack &S){    S.base = new elemtype[MAXSIZE];    S.top = S.base;    S.stacksize = MAXSIZE;}void Push(Sqstack &S, elemtype e){    if(S.top-S.base >= S.stacksize){        S.base = (elemtype *)realloc(S.base,(another+S.stacksize)*sizeof(elemtype));        S.top = S.base + S.stacksize;        S.stacksize += another;    }    *S.top++ = e;}elemtype Pop(Sqstack &S, elemtype &e){    if(S.top == S.base) return false;    return e = *--S.top;}void Clearstack(Sqstack &S){    S.top = S.base;}int main(){    int t, n, num;    char c;    scanf("%d", &t);    while(t--){        scanf("%d %d", &MAXSIZE, &n);        Sqstack S;        initStack(S);        while(n--){            getchar();            scanf("%c", &c);            if(c == 'P'){                scanf("%d", &num);                if(fullStack(S)){                    printf("F\n");                }                else{                    Push(S, num);                }            }            else if(c == 'A'){                if(isEmpty(S)){                    printf("E\n");                }                else{                    printf("%d\n", getTop(S));                }            }            else if(c == 'O'){                if(isEmpty(S)){                    printf("E\n");                }                else{                    int x;                    Pop(S, x);                    printf("%d\n", x);                }            }        }    printf("\n");    }    return 0;}


阅读全文
0 0
原创粉丝点击