N
Mincho schrieb:
will ich 2 Stacks initialisieren und mit denen arbeiten.
probier's damit:
typedef struct __bytestack
{
unsigned char *p;
int top;
int idx;
} bytestack_t;
bytestack_t *stack_create (unsigned int size)
{
bytestack_t *bs = malloc (sizeof (bytestack_t));
if (!bs)
return 0;
bs->p = malloc (size);
if (!bs->p)
{
free (bs);
return 0;
}
bs->idx = 0;
bs->top = size;
return bs;
}
void stack_destroy (bytestack_t *bs)
{
free (bs->p);
free (bs);
}
int stack_push (bytestack_t *bs, unsigned char b)
{
if (bs->idx == bs->top)
return -1;
bs->p[bs->idx] = b;
bs->idx++;
return 0;
}
int stack_pop (bytestack_t *bs)
{
bs->idx--;
if (bs->idx == -1)
{
bs->idx = 0;
return -1;
}
return bs->p[bs->idx];
}
benutzen kannste es dann z.b. so:
// test
void main (void)
{
// stack für 3 bytes anlegen
bytestack_t *stack = stack_create (3);
// test: zugriff auf leeren stack
printf ("pop vom leeren stack: %d\n", stack_pop(stack)); // geht schief, stack leer
puts("");
// ein paar daten drauf tun
printf ("1 drauf: %d\n", stack_push (stack, 1));
printf ("2 drauf: %d\n", stack_push (stack, 2));
printf ("3 drauf: %d\n", stack_push (stack, 3));
printf ("4 drauf: %d\n", stack_push (stack, 4)); // geht schief, stack zu klein
puts("");
// ausgabe
printf ("3 runter: %d\n", stack_pop(stack));
printf ("2 runter: %d\n", stack_pop(stack));
printf ("1 runter: %d\n", stack_pop(stack));
printf ("stack leer: %d\n", stack_pop(stack)); // geht schief, stack leer
printf ("stack leer: %d\n", stack_pop(stack)); // geht schief, stack leer
puts("");
// stack löschen
stack_destroy (stack);
}