// definicje pomocniczych typów danych

enum szukanie {PORAZKA=0, SUKCES=1};

typedef struct rob{
int wartosc;
struct rob *nastepny; // wskaźnik do
}ELEMENT;             // następnego elementu

class LISTA{ // początek deklaracji klasy LISTA
public:
  // nagłówki:	
	friend LISTA& operator +(LISTA&, LISTA&); // sumuje dwie listy

	friend void fuzja(LISTA &x, LISTA &y);	  // realizacja poza klasą, jako funkcja zaprzyjaźniona!

	void wypisz();         					// wypisuje zawartość listy
	int szukaj(int x);   	   				// szuka elementu x na liście
	void naKoniec(int x); 	   				// dorzuca bez sortowania
	void dodSort(int x); 	   				// dorzuca z sortowaniem 
	LISTA& operator --(int); 				// usuwa ostatni element listy, przedefiniowany operator --, parametr 'int' jest sztuczny, informuje 
											// kompilator o tym, że jest to operator "przyrostkowy"
	// kilka prostych metod:
	bool  pusta(){             				// czy lista coś zawiera?
	return (inf.glowa==NULL);
	}
	void zeruj(){							// zeruje listę bez wykonywania "delete"
	inf.glowa=inf.ogon=NULL;
	}
	
	LISTA(){	// konstruktor
	inf.glowa=inf.ogon=NULL;
	}	
	~LISTA(){	// destruktor, który używa przedefiniowanego wcześniej operatora --	     	
	while (!pusta()) (*this)--;
	}
private:
	typedef struct{        // definicja struktury informacyjnej, któta  zapewni dostęp do listy
				   ELEMENT *glowa;
				   ELEMENT *ogon;
	}INFO;

	INFO inf;				// deklacja zmiennej zawiewrającej strukturę informacyjną
	
}; //koniec deklaracji klasy LISTA
