设从键盘输入一整数的序列:a1,a2,a3,...,an,用栈结构存储输入的整数,当ai不等于-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈【数据结构】【C语言代码】【顺序栈】

#include <stdio.h>  
#include <stdlib.h>  
  
#define MAXSIZE 10  
#define OVERFLOW -1  
  
typedef struct {  
    char* base;  
    char* top;  
    int stacksize;  
} SqStack;  
  
// 初始化栈  
int InitStack(SqStack* S) {  
    S->base = (char*)malloc(MAXSIZE * sizeof(char));  
    if (!S->base)  
        return OVERFLOW;  
    S->top = S->base;  
    S->stacksize = MAXSIZE;  
    return 1;  
}  
  
// 入栈  
int Push(SqStack* S, int e) {  
    if (S->top - S->base == S->stacksize) {  
        printf("栈已满!\n");  
        return 0;  
    }  
    *S->top++ = e;  
    return 1;  
}  
  
// 出栈  
int Pop(SqStack* S, int* e) {  
    if (S->top == S->base) {  
        printf("栈为空!\n");  
        return 0;  
    }  
    *e = *--S->top;  
    return 1;  
}  
  
// 当ai不为-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈  
void Yes_No(SqStack* S, int a) {  
    if (a == -1) {  
        int e;  
        Pop(S, &e);  
        printf("%d ", e);  
    } else {  
        Push(S, a);  
    }  
}  
  
int main() {  
    SqStack S;  
    InitStack(&S);  
    printf("请输入一整数序列(以*结尾):");  
    int a;  
    while (scanf("%d", &a) && a != '*') {  
        Yes_No(&S, a);  
    }  
    printf("\n栈中元素为:");  
    while (S.top != S.base) {  
        int e;  
        Pop(&S, &e);  
        printf("%d", e);  
    }  
    free(S.base); // 释放栈空间  
    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值