博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

顺序栈 (栈操作)

Posted on 2018-04-30 21:50  薄辉'静谧  阅读(363)  评论(0编辑  收藏  举报

描述

 

创建一个顺序栈,能够完成栈的初始化、入栈、出栈、获取栈顶元素、销毁栈等操作。 

部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。

 

输入

 

输入数据由以下几种命令组成:

(1)push x:将x压入栈

(2)pop:出栈

(3)top:获取栈顶元素

每个命令占一行,以EOF结束。

 

输出

 

当执行pop时输出出栈的元素,当执行top时输出栈顶元素。

当栈为空时,需要输出Empty。

当栈满时能自动扩容。

 

样例输入

 

push 1
push 2
top
pop
pop
pop

 

样例输出

 

2
2
1
Empty

代码测试:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Maxx 10000
#define Maxy 1000

typedef struct SqStack{
    int *base;
    int *top;
    int size;
}SqStack;

int InitStack(SqStack *s){
    s->base=(int *)malloc(Maxx*sizeof(int));
    if(!s->base) return 0;
    s->top=s->base;
    s->size=Maxx;
    return 1;
}

int Push(SqStack *s,int x){
    if((s->top-s->base)>s->size){
        s->base=(int *)realloc(s->base,(s->size+Maxy)*sizeof(int));
        if(!s->base) return 0;
        s->top=s->base+s->size;
        s->size+=Maxy;
    }
    *s->top++=x;
    return 1;
}

int GetTop(SqStack s,int *x){
    if(s.top==s.base) return 0;
    *x=*(s.top-1);
    return 1;
}

int Pop(SqStack *s,int *x){
    if(s->top==s->base) return 0;
    *x=*--s->top;
    return 1;
}
void Destroy(SqStack *s)
{
    free(s->base);
}

int main()
{
    SqStack s;
    InitStack(&s);
    char cmd[10];
    int x, res;
    while(scanf("%s", cmd)!=EOF)
    {
        if(strcmp(cmd, "push")==0)
        {
            scanf("%d", &x);
            Push(&s, x);
        }
        else if(strcmp(cmd, "top")==0)
        {
            res = GetTop(s, &x);
            if(res==0)
                printf("EMPTY\n");
            else
                printf("%d\n", x);
        }
        else
        {
            res = Pop(&s, &x);
            if(res==0)
                printf("EMPTY\n");
            else
                printf("%d\n", x);
        }
    }
    Destroy(&s);
    return 0;
}
View Code