156 Rozdział 5. Struktury danya
Proces przechadzania się po drzewie nie jest bynajmniej zakończony: ot komórki (**) odchodzi strzałka do (*+*), vv której także następuje „zapętlenie' Jakie słowo teraz przeczytaliśmy? Oczywiście BAK! Rozumując podobnie nic-żemy „przeczytać” jeszcze słowa BANK i ABBA.
Idea liSS, dość trudna do wyrażenia bez poparcia rysunkiem, jest zaskakuj*; co prosta w realizacji końcowej, w postaci programu wynikowego. Oczywiści! nie tworzą one jeszcze kompletnego modułu obsługi słownika, ale ta reszta, której brakuje (obsługa dysku, „ładne" procedurki wyświetlania etc.), to juz tylko zwykła „wykończeńiówka”.
Omówmy po kolei procedury tworzące zasadniczy szkielet modułu obsługi USS.
Funkcje do indeksu i z indeksu pełnią role translacyjne. Z indeksów liczbowych! tablicy f (elementu składowego rekordu USS) możemy odtworzyć odpowiadające I poszczególnym pozycjom litery i vice versa. To właśnie zwiększając wartości stałej n oraz nieco modyfikując te dwie funkcje możemy do modułu obsługują-1 cego USS dołączyć znajomość polskich znaków!
int do indeksu (char r.)
II znak ASCII -> indeks
if ( c<='Z' && c>-return toupper(c) alse
(
if Cc—' ') if (c—’-’)
A’ | | -'A';
c<='z' && c>=’a’
return 26; return 27;
char z_indek3u(int n)
I
// indeks -> znak ASCII if (n>=0 4& n<=(,Z'-’A'))
return toupper((char) n+'A'); else
(
if (n--26) if (n==27)
return return '-'
Funkcja zapisz otrzymuje wskaźnik do pierwszej komórki słownika. Zanim zostanie stworzona nowa komórka pamięci funkcja ta sprawdzi, czy aby jest to na pewno niezbędne. Przykładowo niech w drzewie USS istnieje już słowo ALFABET, a my chcemy doń dopisać imię sympatycznego kosmity ze znanego amerykańskiego serialu: ALF. Otóż wszystkie poziomy odpowiadające literom ‘A’, ‘L' i ‘F’już istnieją-w konsekwencji żadne nowe komórki pamięci nie