Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void stack_realloc (struct Stack * s);
- struct Stack *stack_create(int size)
- {
- struct Stack *s;
- s = (struct Stack *) calloc (1, sizeof (struct Stack));
- s->a = (Data *) calloc (size, sizeof (Data));
- s->n = 0;
- s->size = size;
- return s;
- }
- void stack_push(struct Stack * s, Data x)
- {
- if (s->n >= s->size)
- stack_realloc (s);
- if (s->n < s->size) {
- s->a[s->n] = x;
- s->n++;
- }
- }
- Data stack_pop(struct Stack * s)
- {
- if (s->n > 0) {
- s->n--;
- return s->a[s->n];
- }
- return -1;
- }
- Data stack_get(struct Stack * s)
- {
- if (s->n > 0)
- return s->a[s->n - 1];
- return -1;
- }
- void stack_print(struct Stack * s)
- {
- if (s->n == 0) {
- printf ("Empty stack\n");
- return;
- }
- for (size_t i = 0; i < s->n; i++) {
- printf ("%d ", s->a[i]);
- }
- printf ("\n");
- }
- int stack_size(struct Stack * s)
- {
- return s->n;
- }
- void stack_clear(struct Stack * s)
- {
- s->n = 0;
- for (size_t i = 0; i < s->size; i++)
- s->a[i] = 0;
- }
- void stack_destroy(struct Stack * s)
- {
- s->n = 0;
- free (s->a);
- free (s);
- }
- void stack_realloc (struct Stack * s)
- {
- Data *na = (Data *) calloc (s->size * 2, sizeof (Data));
- for (int i = 0; i < s->size; i++)
- na[i] = s->a[i];
- free (s->a);
- s->a = na;
- s->size = 2 * s->size;
- }
- int stack_is_empty(struct Stack * s)
- {
- if (s->n == 0) return 1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement