28
1. PROJEKTOWANIE I ANALIZA ALGORYTMÓW
data next reclist
RYSUNEK 1.5. Przykładowa struktura danych
Każda komórka łańcucha (w górnej części rysunku) jest rekordem o następującej definicji:
type
recordtype = record cursor: integer; ptr: trecordtype
end;
Pole cursor tego rekordu jest kursorem do jakiegoś elementu tablicy reclist, pole ptr zawiera natomiast wskaźnik do następnej komórki w łańcuchu. Wszystkie rekordy łańcucha są rekordami anonimowymi, nie mają nazw, gdyż każdy z nich utworzony został dynamicznie, w wyniku wywołania funkcji new. Pierwszy rekord łańcucha wskazywany jest natomiast przez zmienną header:
var
header: trecordtype:
Pole data pierwszego rekordu w łańcuchu zawiera kursor do czwartego elementu tablicy reclist, pole ptr jest natomiast wskaźnikiem do drugiego rekordu. W drugim rekordzie pole data ma wartość 2, co oznacza kursor do drugiego elementu tablicy reclist; pole ptr jest natomiast pustym wskaźnikiem oznaczającym po prostu brak wskazania na cokolwiek. W języku Pascal „puste” wskazanie oznaczane jest słowem kluczowym nil. □
Programista przystępujący do rozwiązywania jakiegoś problemu staje często przed wyborem jednego spośród wielu możliwych algorytmów. Jakimi kryteriami powinien się wówczas kierować? Otóż istnieją pod tym względem dwa, sprzeczne ze sobą, kryteria oceny:
(1) Najlepszy algorytm jest łatwy do zrozumienia, kodowania i weryfikacji.
(2) Najlepszy algorytm prowadzi do efektywnego wykorzystania zasobów komputera i jest jednocześnie tak szybki, jak to tylko możliwe.