顺序栈的逆序和顺序输出

#include<stdio.h>
#include<stdlib.h>

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<a;i++)
    {
        if(!pop(&s,&c))
            printf("栈空\n");
        else
            printf("%d ",c);
    }*/

    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;
}

实验结果

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值