#include "stack.h"

struct stack *stack_push(struct stack *s, struct expression_element e)
{
    struct stack *new = malloc(sizeof(struct stack));
    new->next = NULL;
    new->data = e;
    if (s == NULL)
        return new;
    new->next = s;
    return new;
}

struct stack *stack_pop(struct stack *s)
{
    if (!s)
        return NULL;
    struct stack *next = s->next;
    free(s);
    return next;
}

void stack_destroy(struct stack **s)
{
    if(!s)
        return;
    while (*s)
    {
        *s = stack_pop(*s);
    }
}

struct expression_element stack_peek(struct stack *s)
{
    return s->data;
}