Cześć wszystkim.
Otóż przerobiłem znaleziony w internecie kod pana mgr Jerzego Wałaszka implementujący kolejkę w C++, a następnie przerobiłem go na C.
Problemu nie było, gdy nie było struktury, lecz wtedy można tworzyć tylko jedną kolejkę. Po dodaniu struktury i zmianie zmiennych, są pewne komplikacje przy operacjach push i front. Przy wypisywaniu program wyświetla elementy kolejki w nieskończoność i zawsze tylko o jednej wartości. Cóż, sami zobaczcie...
#include <stdio.h>
#include <stdlib.h>
const int MAXINT = -2147483647;
typedef struct kolejka
{
int n; // rozmiar tablicy
int qptr; // wskaźnik początku kolejki
int qcnt; // licznik elementów
int * Q; // tablica dynamiczna
}kolejka;
void utworz(kolejka kol,int x)
{
kol.n = x;
kol.Q = (int*)malloc(x*sizeof(int));
kol.qptr = kol.qcnt = 0;
}
int empty(kolejka kol)
{
return !kol.qcnt;
}
int front(kolejka kol)
{
if(kol.qcnt) return kol.Q[kol.qptr];
return -MAXINT;
}
void push(kolejka kol,int v)
{
int i;
if(kol.qcnt < kol.n)
{
i = kol.qptr + kol.qcnt++;
if(i >= kol.n) i -= kol.n;
kol.Q[i] = v;
}
}
void pop(kolejka kol)
{
if(kol.qcnt)
{
kol.qcnt--;
kol.qptr++;
if(kol.qptr == kol.n) kol.qptr = 0;
}
}
int main()
{
kolejka k1;
int f;
utworz(k1,10); // tworzymy kolejkę na 10 elementów
int i;
for(i = 1; i <= 10; i++) push(k1,i);
while(!empty(k1))
{
f=front(k1);
printf("%d\n",f);
pop(k1);
}
free(k1.Q);
return 0;
}
Czy ktoś mógłby mi powiedzieć, w czym tkwi prroblem?
Z góry dziękuję za wszelką pomoc.