5.1. Listy jednokierunkowe 97
public:
int pusta() // czy lista jest pusta?
{
return (inf.glowa==NULL);
}
II sumuje dwie listy:
LISTA friends operator i(LISTAa,1ISTAS);
void wypisz O; // wypisuje elementy listy
int szukaj(int x); II szuka elementu x
void dorzuci(int x); II dorzuca x bez sortowania void dorzuc2(int x); II dorzuca x z sortowaniem
void zeruj() // zerowanie listy
{ inf,giowa=in£.ogcn=NOLI; )
LISTAS operator —(); // usuwa ostatni element listy
LISTAO // konstruktor
(inf.glowa=inf.ogon=NULL;}
~LISTA() // destruktor
(while (!pu3ta(j) (*this)--;) private:
typedef struct II struktura informacyjna
(
ELEMENT *glowa;
ELEMENT *ogon;
1INFO;
INFO inf; II rekord informacyjny
); // koniec deklaracji klasy LISTA
Pole wartość w naszym przykładzie jest typu int, ale w praktyce może to być bardzo złożony rekord informacyjny (np. zawierający imię, nazwisko, wiek...).
Klasa LISTA nie jest zbyt rozbudowana, jednak zawiera kilka rozwiązań, które wymagają dość szczegółowego komentarza. Kwestią otwartą pozostaje wybór ewentualnego utajnienia typów danych; programista musi sam podjąć odpowiednie decyzję mając na uwadze takie aspekty, jak: sens ujawnia-nia/ukrywania atrybutów, parametry „sprawnościowe” metod etc. Propozycje przedstawione w tym rozdziale w żadnym razie nie pretendują do miana rozwiązań wzorcowych - takie bowiem nie istnieją wobec nieskończonej w zasadzie ilości nowych sytuacji i problemów, z którymi może się w praktyce spotkać programista. Staraniem autora było raczej pokazanie istniejącej różnorodności, a nie przekonywanie do jednych rozw iązań przy jednoczesnym pomi janiu innych.