#include <iostream.h>

// implementacja kolejki FIFO ( First In First Out)

typedef double Elem;
typedef struct fifo{
  Elem pole;
  struct fifo *nast;
} Fifo;

Fifo *glowa=NULL,*ogon=NULL;

void Push(Elem wartosc){
  Fifo *nowy=new Fifo;
  nowy->pole=wartosc;
  nowy->nast=NULL;
  // jesli ogon nie jest NULL, to znaczy ze cos juz jest w kolejce
  if ( ogon ){
    ogon->nast=nowy;
    ogon=nowy;
  }
  else ogon=glowa=nowy;
}

// zdjecie z kolejki
Elem Pull(){
  Elem w;
  Fifo *pom;
  if ( glowa ){
    w=glowa->pole;
    pom=glowa->nast;
    delete glowa;
    if ( pom )
      glowa=pom;
    else
      glowa=ogon=NULL;
  }
  return w;
}

int main(){

  char komenda=' ';
  Elem wart;

  while ( komenda !='k' ){
    cout << "Co teraz? k-koniec, d-dodaj do kolejki, z-pobierz z kolejki."
	 << endl;
    cin >> komenda;
    switch ( komenda ){
    case 'd':
      cout << " Podaj wartosc : ";
      cin >> wart;
      Push(wart);
      break;
    case 'z':
      if ( glowa ){
	wart=Pull();
	cout << " Pobrano wartosc : " << wart << endl;
      }
      else
	cout << "Koleka jest pusta!" << endl;
    }
  }
  return 0;
}

