Witam
Napisałem kolejkę w strict c, ma być w niej jedynie opcja dodawania i usuwania elementów. Jak się doda element do kolejki to ma wypisać OK, jak usunie, to ma wypisać element, który został usunięty, jak nie ma co usuwać (kolejka pusta) to ma wyświetlić błąd.
Mój problem polega na tym, że wszystko działa, dopóki nie dojdzie się do pustej kolejki (do napisu BLAD), na początku można dodawać, usuwać, ale jak się usunie za dużo i dojdzie do błędu to potem mimo dodawania nowych elementów ciągle będzie przy usuwaniu wyskakiwał błąd. Jest już późno i chciałbym to skończyć, więc mógłby ktoś znaleźć błąd w moim kodzie? byłbym wdzięczny.
#include <stdio.h>
#include <stdlib.h>
struct kolejka
{
int dane;
kolejka *ref;
};
kolejka *pointer = NULL; ;
kolejka *tmp = NULL; ;
kolejka *first = NULL; ;
void push(int dane)
{
tmp = (struct kolejka*)malloc(sizeof(struct kolejka));
(*tmp).dane = dane;
if(pointer == NULL) first = tmp;
else (*pointer).ref = tmp; //bądź pointer->ref
tmp -> ref = NULL; //przykładowy
pointer = tmp;
}
void pop()
{
if (first != NULL)
{
tmp = (*first).ref;
printf("%d\n", (*first).dane);
free(first);
first = tmp;
}
else printf("BLAD\n");
}
int main()
{
int dane;
char przelacznik;
while(~scanf("%c", &przelacznik))
{
if(przelacznik == '+')
{
scanf("%d", &dane);
push(dane);
printf("OK\n");
}
if(przelacznik == '-')
{
if(first != NULL) pop();
else printf("BLAD\n");
}
}
return 0;
}