/* * An example for stack implemented in fix size array */ #include #include #define SIZE 100 typedef struct { int data[SIZE]; int top; // 0 represent empty stack } Stack; void push(Stack* s, int data) { if (s->top == SIZE - 1) { fprintf(stderr, "overflow!\n"); exit(1); } s->data[s->top++] = data; } int pop(Stack* s) { if (s->top == 0) { fprintf(stderr, "underflow!\n"); exit(1); } return s->data[--s->top]; } void init(Stack* s) { s->top = 0; } int top(Stack* s) { return s->data[s->top - 1]; } int empty(Stack* s) { return s->top == 0; } int main() { Stack s; init(&s); push(&s, 1); printf("Top s is %d\n", top(&s)); push(&s, 2); printf("Top s is %d\n", top(&s)); pop(&s); printf("Top s is %d\n", top(&s)); // w/o boundary checking /* pop(&s); */ /* printf("Top s is %d\n", top(&s)); */ /* pop(&s); */ /* printf("Top s is %d\n", top(&s)); */ pop(&s); printf("Top s is %d\n", top(&s)); pop(&s); printf("Top s is %d\n", top(&s)); return 0; }