stack.c 741 Bytes
//
// Created by imanol on 12/25/16.
//

#include <malloc.h>
#include "stack.h"

#define EXTEND_SIZE 10

uint32_t stack_size = EXTEND_SIZE;
uint32_t stack_pos = 0;
short *stack;

void initialize_stack()
{
    stack = calloc(EXTEND_SIZE,sizeof(short));
}

void extend_stack()
{
    stack_size += EXTEND_SIZE;
    realloc(stack,stack_size*sizeof(short));
}

void shrink_stack()
{
    stack_size -= EXTEND_SIZE;
    realloc(stack,stack_size*sizeof(short));
}

void push(short value)
{
    stack[stack_pos++] = value;
    if(stack_pos == stack_size-1)
    {
        extend_stack();
    }
}
short pop()
{
    short value = stack[stack_pos--];
    if(stack_size - stack_pos == 2*EXTEND_SIZE)
    {
        shrink_stack();
    }
    return value;
}