push, front, pop - kłopot z przełożeniem kolejki FIFO z C++ na C

0

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.

1

kolejka kol - wszędzie przekazuj przez wskaźnik.

0

@up
dzięki wielkie, pomogło :)
Temat do zamknięcia

1 użytkowników online, w tym zalogowanych: 0, gości: 1