Implémentation d'une pile impérative avec une tableau en C
/* implementation of the stack abstract data type (imperative interface)
using a vector concrete data type */
#include
#include
#include "stack.h"
struct stack
{
void **contents;
int top;
int size;
};
stack
stack_create(void)
{
stack temp = malloc(sizeof(struct stack));
temp -> size = 5;
temp -> contents = malloc(temp -> size * sizeof(void *));
temp -> top = 0;
return temp;
}
void
stack_push(stack s, void *object)
{
if(s -> top == s -> size)
{
s -> size *= 2;
s -> contents = realloc(s -> contents, s -> size * sizeof(void *));
}
s -> contents[s -> top++] = object;
}
int
stack_empty(stack s)
{
return s -> top == 0;
}
void *
stack_top(stack s)
{
assert(!stack_empty(s));
return s -> contents[s -> top - 1];
}
void
stack_pop(stack s)
{
assert(!stack_empty(s));
s -> contents[--s -> top] = NULL;
if(s -> top * 4 < s -> size && s -> size > 5)
{
s -> size /= 2;
s -> contents = realloc(s -> contents, s -> size * sizeof(void *));
}
}