#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define OVERFLOW 0
#define ERROR 0
#define OK 1
typedef int Status;
typedef int SElemType;
typedef struct Node{
SElemType* base;
SElemType* top;
size_t stacksize;
}Sqstack;
Status push(Sqstack *s,SElemType e) {
if (s->top-s->base==s->stacksize) {
return ERROR;
}
*(s->top) = e;
(s->top)++;
return OK;
}
Status pop(Sqstack* s,SElemType *e) {
if (s->top == s->base) {
return ERROR;
}
s->top = --(s->top);
*e = *(s->top);
return OK;
}
Status InitStack(Sqstack* s) {
s->base = (SElemType*)malloc(MAXSIZE * sizeof(SElemType));
if (s->base == NULL) {
OVERFLOW;
}
s->top = s->base;
s->stacksize = MAXSIZE;
return OK;
}
int main() {
Sqstack s;
if (InitStack(&s) == OK) {
printf("申请栈空间成功!\n");
}
else {
printf("申请栈空间失败!\n");
}
int i,value;
do {
printf("压栈请按1,弹栈请按0,推出请按-1 : ");
scanf_s("%d",&i,4);
if (i == 1) {
printf("\n请输入压栈数据 : ");
scanf_s(" %d",&value,4);
getchar();
if (push(&s, value) == OK) {
printf("\n压栈成功!\n");
}
else {
printf("\n栈满!压栈失败!\n");
}
}
else if (i == 0) {
SElemType e;
if (pop(&s,&e) == OK) {
printf("\n弹栈成功,弹出数据为 : %d\n",e);
}
else {
printf("\n栈空!弹栈失败!\n");
}
}
} while (i != -1);
free(s.base);
return 0;
}