/* stack8b.c: implementation */
#include "stack8b.h"
#include <stdlib.h>
struct Stack {
int *data;
int size;
int ptr;
int error;
};
Stack* stk_create(int stk_size) {
Stack* stkp = malloc(sizeof(Stack));
stkp->size = stk_size;
stkp->data = malloc(stkp->size*sizeof(int));
stkp->ptr = stkp->error = 0;
return stkp;
};
void stk_push(Stack* stkp, int x) {
if (stkp->ptr < stkp->size) {
stkp->data[stkp->ptr++] = x;
stkp->error = 0;
}
else
stkp->error = 1;
}
int stk_pop(Stack* stkp) {
if (stkp->ptr > 0) {
int x = stkp->data[--stkp->ptr];
stkp->error = 0;
return x;
} else {
stkp->error = 1;
return STK_ERROR;
}
}
int stk_top(Stack* stkp) {
if (stkp->ptr > 0) {
stkp->error = 0;
return stkp->data[stkp->ptr-1];
} else {
stkp->error = 1;
return STK_ERROR;
}
}
int stk_size(Stack* stkp) {
return stkp->ptr;
}
int stk_error(Stack* stkp) {
return stkp->error;
}
void stk_destroy(Stack* stkp) {
free(stkp->data);
free(stkp);
}