顺序栈的逆序和顺序输出

#include
#include

typedef int Status;

#define OVERFLOW -2
#define ERROR 0
#define OK 1
#define MAXSIZE 100

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

/**栈的创建和初始化**/
Status InitStack(SqStack *s)
{
    s->base=(int *)malloc(sizeof(int));
    if(!s->base)
        exit(OVERFLOW);
    s->stacksize=MAXSIZE;
    s->top=s->base;
    return OK;
}

/**入栈**/
Status Push(SqStack *s,int e)
{
    if(s->top-s->base==s->stacksize)
        return ERROR;//栈满
    *(s->top)++=e;
    return OK;
}

/**出栈**/
Status pop(SqStack *s,int *e)
{
    if(s->base==s->top)
        return ERROR;
    *e=*--s->top;
    return OK;
}


int main()
{
    SqStack s,s1;
    int a,i,b,c,d;
    printf("创建栈\n");
    if(!InitStack(&s))
        printf("创建失败\n\n");
    else printf("创建成功\n\n");

    printf("给栈内填充数据\n");
    printf("输入栈内的数据个数:");
    scanf("%d",&a);
    printf("输入数据:\n");
    for(i=0;i<a;i++)
    {
        scanf("%d",&b);
        if(!Push(&s,b))
            printf("栈满\n");
    }

    /*printf("栈顺序输出为:\n");
    for(i=0;i

    if(!InitStack(&s1))
        printf("创建栈失败\n\n");
    printf("栈按顺序输出为:\n");
    for(i=0;i<a;i++)
    {
        if(!pop(&s,&d))
            printf("栈空\n");
        else
        {
            printf("%d ",d);
            if(!Push(&s1,d))
                printf("栈满\n\n");
        }
    }
    printf("\n");

    printf("栈逆序输出为:\n");
    for(i=0;i<a;i++)
    {
        if(!pop(&s1,&d))
            printf("栈空\n");
        else
            printf("%d ",d);
    }
    printf("\n");
    return 0;
}

顺序栈的逆序和顺序输出_第1张图片

你可能感兴趣的:(数据结构,c语言)