5.2. Tablicowa implementacja list 123
tego konieczne będzie wybranie jakiejś zmiennej do zapamiętywania aktualnej ilości elementów wstawionych wcześniej do listy.
Ideę ilustruje rysunek 5-10, gdzie możemy zobaczyć tablicową implementację listy J-cIcmcntowcj złożonej z elementów: •/, 6, I, -5 i 12\
Rys. 5 - 10.
dane
5 |
4 |
(i |
1 |
-.5 |
12 |
miejsca wolne
Tablicowa
implementacja
listy.
Programowa realizacja jest bardzo prosta - deklaracja klasy nie zawiera żadnych niespodzianek:
listaJab.cpp
const int KaxTab=20l; // 200 możliwych elementów
class ListaTab
// konstrnktor klasy // usuń element z pozycji k II wstaw element x na koniec listy II wstaw element x na pozycję k: int k) ;
ł
int tab ;ikaxTab];
public:
ListaTab!)
i tab[0]=0;)
void UsunElement(int k); void WstawEleir.ent (int x)
void WstawEleir.ent (int x, void WypiszListe()r
};
// tab(0] zarezerwowane!
Omówmy błyskawicznie wszystkie funkcje usługowe klasy. Przypuśćmy, że chcemy dysponować możliwością usunięcia £-tego elementu naszej „listy". Po zbadaniu sensu takiej operacji (element musi istnieć!) wystarczy przesunąć zawartość tablicy o jeden w lewo od Ar-tej pozycji. Podczas przesuwania element nr k jest bezpowrotnie „zamazywany” przez swojego sąsiada:
void Li3taTab::UsunElement(int k)
I
II usuwamy k-ty element listy, k>=l if((k>=l) && (k<=tab[0]))
(
for(int i=k;ictab|0];i++) tab[i]=tab[i+1 ] ; tab[0]—;
)
>
Wariantów przedstawionej wyżej funkcji może być dość sporo. Mam nadzieję, że Czytelnik w miarę swoich specyficznych potrzeb będzie mógł je sobie stworzyć.