#include<stdio.h>
#include<stdlib.h>
typedef int bool;
#define true 1
#define false 0
#define ERROR -1
#define INITSIZE 10
typedef struct {
int *base;
int *top;
int stacksize;
} SqStack;
SqStack InitSqStack() {
SqStack stack;
SqStack *p = &stack;
p->base = (int*) malloc(sizeof(int) * INITSIZE);
if (!p->base)
exit(ERROR);
p->top = p->base;
p->stacksize = INITSIZE;
return stack;
}
void SqStackPush(SqStack *stack, int e) {
if (stack->top - stack->base >= stack->stacksize)
exit(ERROR);
*stack->top++ = e;
}
int SqStackPop(SqStack *stack) {
if (stack->base == stack->top)
exit(ERROR);
int e = *--stack->top;
return e;
}
bool SqStackEmpty(SqStack stack) {
return stack.top == stack.base ? true : false;
}
int SqStackLen(SqStack stack) {
return stack.top - stack.base;
}
int main(void) {
SqStack stack = InitSqStack();
SqStackPush(&stack, 1);
printf("%d\n", SqStackPop(&stack));
SqStackPush(&stack, 2);
printf("%d\n", SqStackPop(&stack));
SqStackPush(&stack, 3);
SqStackPush(&stack, 2);
SqStackPush(&stack, 1);
printf("%d\n", SqStackEmpty(stack));
printf("%d\n", SqStackLen(stack));
return 0;
}