Stack.c

De la WikiLabs
Jump to navigationJump to search
#include "stack.h"
#include <stdlib.h>

struct stack * create_stack(unsigned int capacity){
    struct stack * new_stack;
    new_stack = (struct stack*)malloc(sizeof(struct stack));
    new_stack->data = (char*)malloc(capacity * sizeof(char));
    new_stack->capacity = capacity;
    new_stack->head = 0;
    
    return new_stack;
}

void delete_stack(struct stack * old_stack){
    free(old_stack->data);
    free(old_stack);
}

int is_full(struct stack * my_stack){
    return my_stack->head == my_stack->capacity;
}

int is_empty(struct stack * my_stack){
    return !my_stack->head; // head == 0
}

void stack_push(struct stack * my_stack, char element){
    if(is_full(my_stack)){
        return;
    }
    
    my_stack->data[my_stack->head] = element;
    my_stack->head++;       
}

char stack_pop(struct stack * my_stack){
    if(is_empty(my_stack)){
        return 0;
    }
    
    return my_stack->data[--my_stack->head];
}