1 /****************************************************************************** 2 * 3 * File: istack.c 4 * 5 * Created: 06/06/2001 6 * 7 * Author: Pavel Sakov 8 * CSIRO Marine Research 9 * 10 * Purpose: Handling stack of integers 11 * 12 * Description: None 13 * 14 * Revisions: None 15 * 16 *****************************************************************************/ 17 18 #define STACK_NSTART 50 19 #define STACK_NINC 50 20 21 #include <stdlib.h> 22 #include <string.h> 23 #include "istack.h" 24 istack_create(void)25istack* istack_create(void) 26 { 27 istack* s = malloc(sizeof(istack)); 28 29 s->n = 0; 30 s->nallocated = STACK_NSTART; 31 s->v = malloc(STACK_NSTART * sizeof(int)); 32 return s; 33 } 34 istack_destroy(istack * s)35void istack_destroy(istack* s) 36 { 37 if (s != NULL) { 38 free(s->v); 39 free(s); 40 } 41 } 42 istack_reset(istack * s)43void istack_reset(istack* s) 44 { 45 s->n = 0; 46 } 47 istack_contains(istack * s,int v)48int istack_contains(istack* s, int v) 49 { 50 int i; 51 52 for (i = 0; i < s->n; ++i) 53 if (s->v[i] == v) 54 return 1; 55 return 0; 56 } 57 istack_push(istack * s,int v)58void istack_push(istack* s, int v) 59 { 60 if (s->n == s->nallocated) { 61 s->nallocated *= 2; 62 s->v = realloc(s->v, s->nallocated * sizeof(int)); 63 } 64 65 s->v[s->n] = v; 66 s->n++; 67 } 68 istack_pop(istack * s)69int istack_pop(istack* s) 70 { 71 s->n--; 72 return s->v[s->n]; 73 } 74 istack_getnentries(istack * s)75int istack_getnentries(istack* s) 76 { 77 return s->n; 78 } 79 istack_getentries(istack * s)80int* istack_getentries(istack* s) 81 { 82 return s->v; 83 } 84