Problem z implementacją kolejki

0

Mam problem z implementacją kolejki FIFO.
Prosiłbym o wskazanie błędów w moim kodzie:

 #include <iostream>
using namespace std;

struct pelement
{
   pelement *nast;
   int w;
};

struct kolejka
{
   pelement *pierwszy;
   pelement *ostatni;
};

void init(kolejka* &k)
{
   k->pierwszy=NULL;
   k->ostatni=NULL;
}

bool empty(kolejka *k)
{
   if(k->pierwszy == NULL)
      return true;
   return false;
}

void insert(kolejka* &k, int x)
{
   pelement *nowy;
   nowy = new pelement;
   nowy->w=x;

   if(empty(k))
      {
         k->ostatni=nowy;
         nowy->nast=NULL;
         k->pierwszy=nowy;
      }
   else
   {
      (k->ostatni)->nast=nowy;
      k->ostatni=nowy;
   }

}
int pop(kolejka* &k)
{
   int x;
   x=(k->pierwszy)->w;
   k->pierwszy=(k->pierwszy)->nast;
   return x;
}

int main()
{
   kolejka *k1;

   init(k1);
   insert(k1,3);
   insert(k1,2);
   cout<< pop(k1) <<endl;
   return 0;
}
0

Dlaczego robisz protezę obiektowości w stylu C w orientowanym obiektowo języku C++? Takie coś się w ogóle kupy nie trzyma. Nie mówiąc już o tym, że w bibliotece standardowej już są takie rzeczy, jak kolejka.

Może chociaż napisz co jest źle.

0

Bo mam podaną szkielet w pascalu i mam to zrobić w c++. Pytaj wykładowcę, na klasie ładnie i przyjemnie będzie

1

Pierwszy z brzegu błąd:

   kolejka *k1; // nie przedzielona pamięć
   init(k1); // pod tą pamięć wpisujesz NULL'e

powinno być:

   kolejka k1;
   init(&k1); // dalej tak samo.

Jeszcze pop masz bez zabezpieczenia na wypadek pustej kolejki.

0

Nieco poprawiłem ;)
http://ideone.com/8fVCP

Najważniejsze dodałem

kolejka *k1= new kolejka;

Dzięki ;)

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