#ifndef CA_UWATERLOO_ALUMNI_DWHARDER_STACK #define CA_UWATERLOO_ALUMNI_DWHARDER_STACK // Author: Douglas Wilhelm Harder // Copyright (c) 2012 by Douglas Wilhelm Harder. All rights reserved. #include struct Stack { void **array; int size; int capacity; }; void init( struct Stack *s, int n ) { // Make sure the array capacity is at least 1 and allocate the memory s->capacity = (n > 0) ? n : 1; s->array = malloc( (s->capacity)*sizeof( void * ) ); s->size = 0; } void deinit( struct Stack *s ) { free( s->array ); } void *top( struct Stack *s ) { return ( s->size == 0 ) ? NULL : s->array[s->size - 1]; } void push( struct Stack *s, void *ptr ) { if ( s->size == s->capacity ) { return; } s->array[s->size] = ptr; ++(s->size); } void pop( struct Stack *s ) { if ( s->size != 0 ) { --(s->size); } } #endif