#include #include #include #include "stacks.h" STACK *init_stack(int size) { if (size <= 0) { return NULL; } STACK *buf; buf = malloc(sizeof(STACK)); if (buf == NULL) { fprintf(stderr, "Error allocating structure\n"); return NULL; } buf->st = malloc(sizeof(int) * size); if (buf->st == NULL) { fprintf(stderr, "Error allocating array\n"); free(buf); return NULL; } buf->cnt = 0; buf->size = size; return buf; } void destroy_stack(STACK *s) { free(s->st); free(s); } void push(STACK *st, double val) { if ((st->cnt) < (st->size)) { st->st[st->cnt] = val; (st->cnt)++; } else { fprintf(stderr, "Stack is full! Stack size is %d, value to add is %f\n", st->size, val); } } double pop(STACK *st) { if ((st->cnt) > 0) { (st->cnt)--; return st->st[st->cnt]; } else { fprintf(stderr, "Attempted to pop an empty stack\n"); return 0; } } double top(STACK* st) { if ((st->cnt) > 0) { return st->st[(st->cnt)-1]; } else { return 0; } } // char stack CHAR_STACK *init_char_stack(int size) { if (size <= 0) { return NULL; } CHAR_STACK *buf; buf = malloc(sizeof(CHAR_STACK)); if (buf == NULL) { fprintf(stderr, "Error allocating structure\n"); return NULL; } buf->st = malloc(sizeof(int) * size); if (buf->st == NULL) { fprintf(stderr, "Error allocating array\n"); free(buf); return NULL; } buf->cnt = 0; buf->size = size; return buf; } void destroy_char_stack(CHAR_STACK *s) { free(s->st); free(s); } void char_push(CHAR_STACK *st, char val) { if ((st->cnt) < (st->size)) { st->st[st->cnt] = val; (st->cnt)++; } else { fprintf(stderr, "Stack is full! Stack size is %d, value to add is %c\n", st->size, val); } } char char_pop(CHAR_STACK *st) { if ((st->cnt) > 0) { (st->cnt)--; return st->st[st->cnt]; } else { fprintf(stderr, "Attempted to pop an empty stack\n"); return 0; } } char* char_top(CHAR_STACK* st) { if ((st->cnt) > 0) { return &(st->st[(st->cnt)-1]); } else { return NULL; } }