#include #include #include "dllist.h" typedef struct { Dllist *list; } Stack; void* new_stack() { Stack *stack = (Stack*) malloc(sizeof(Stack)); stack->list = new_dllist(); return stack; } void* top(void *stack) { Stack *s = (Stack*) stack; // Check to make sure the stack is not empty. if(! empty(s) ) return dll_val( dll_first(s->list) ); else return NULL; } int empty(void *stack) { Stack *s = (Stack*) stack; return dll_empty( s->list ); } void push(void *stack, void *v) { Stack *s = (Stack*) stack; dll_prepend(s->list, v); } void* pop(void *stack) { Stack *s = (Stack*) stack; void *v = top(s); // Only delete if the stack is not empty. if(! empty(s) ) dll_delete_node( dll_first(s->list) ); return v; } void free_stack(void *stack) { Stack *s = (Stack*) stack; free_dllist(s->list); free(s); }