ALG6

ALG6



126 Rozdział 5. Struktury danych

Rys. 5 - 12.

Metoda„ tablic równoległych " (2)


DANE


L2 L3


Kowalski

37

2000

Zaremba

30

3000

Fuks

34

1200


LI




Obok tablicy danych możemy zauważyć trzy osobne tablice „wskaźników”, które umożliwiają dostęp do danych widzianych jako listy' posortowane wedle przeróżnych kryteriów. Tablica dane zawiera rekordy z danymi, przy czym efektywne informacje zaczynają się począwszy od komórki dane 12J w górę. Dlaczego tak dziwnie? Otóż zabieg ten zapewnia nam odpowiedniość „1 do 1" tablicy danych i tablic „wskaźników” (LI, L2 i L3, które są w rzeczywistości zwykłymi tablicami liczb całkowitych).

W tych tablicach bowiem komórki nr 0 i nr / są zarezerwowane odpowiednio na: wskaźnik początku listy i znacznik końca. Należy to rozumieć w ten sposób, że L1[0] zawierający liczbę 4 informuje nas, iż dane[4] są pierwszym rekordem na liście. A jaki jest rekord następny? Oczywiście Ll[4]=2 co oznacza, że drugim rekordem na liście danych jest dane[2]. Postępując tak dalej odtwarzamy całą listę: dane[4], darte[2], dane[3] - łatwo zauważyć, że jest to lista posortowana alfabetycznie wg nazwisk. Skąd jednak wiemy, że dane[3] jest ostatnim rekordem na liście? Otóż LI[3] zawiera 1. co stanowi wg naszej umowy znacznik końca listy.

Analogicznie postępując możemy „odkryć”, że L2 jest listą posortowaną wg kodów 2-cyfruwych, a L3 - wg zarobków. Tablicowa reprezentacja list, w której nastąpiło oddzielenie danych od wskaźników', pozwala na zapamiętanie w tym samym obszarze pamięci kilku list jednocześnie - o ile oczywiście ich elementy składowe w jakiś sposób się pokrywają. W aplikacjach, w których występuje taka sytuacja, jest to cenna właściwość przyczyniająca się do zmniejszenia zużycia pamięci. Ponadto wspomniana na samym początku tego paragrafu wada tablic, tzn. zajmowanie przez nie stałego obszaru, może być w łatwy sposób ominięta poprzez sprytne ukrycie dynamicznego zarządzania tablicą w definicji klasy (patrz np. klasy z grupy TArruy w systemie Borland C++). Samodzielne zdefiniowanie takiej klasy jest jednak czasochłonne -zwłaszcza jeśli zamierzamy zadbać o jej uniwersalność.


Wyszukiwarka

Podobne podstrony:
ALG 6 96 Rozdział 5. Struktury danych Rys. 5 - 3. FCOOh FCI4h FFEEh Przykład listy jedno-kierunk
ALG6 116 Rozdział 5. Struktury danych Iisla2.li int alfabetycznie(ELEMENT *q],ELEMENT *q2) { II czy
ALG 4 94 Rozdział 5. Struktury danych5.1. Listy jednokierunkowe Lista jednokierunkowa jest oszczędną
ALG 8 98 Rozdział 5. Struktury danych W następnych paragrafach zostaną przedstawione wszystkie metod
ALG2 102___Rozdział 5. Struktury danych I ELEMENT *q=inf.głowa; if (pusta()) cout << "(l
ALG4 104 Rozdział 5, Struktury danych dla danego obiektu wykonanie na sobie operacji „dekrementacji
ALG6 106 Rozdziała. Strukturydanjt 5.1 będzie ich fuzją. Rekurencyjny zapis tego procesu jest bardz
ALG8 108__Rozdział 5. Struktury danych5.1.3.Listy jednokierunkowe - teoria i rzeczywistość Oprócz p
ALG0 110 Rozdział 5. Struktury danych Rysunek 5-9 zawiera już kilka nowości w porównaniu z tym, co
ALG2 112 Rozdział 5. Struktury danych 112 Rozdział 5. Struktury danych //rekord informacyjny listy
ALG4 114 Rozdział 5. Struktury danych stan—ZAKOŃCZ; else { przcd=po; po=po->nastepny; I Różnica
ALG8 118 Rozdział 5. Struktury danych if(pŁzed==NULL) // wstawiamy na początek listy ( inf_ptr[nr].
ALG0 120 Rozdział 5. Struktury danych i if (pos!=q) rsturn(O);    II element nie
Alg0 120 Rozdział 5. Struktury danych i if (pos!=q) rsturn(O);    II element nie
ALG2 122 Rozdział 5. Struktury danych Czerniak zarabia 3000zl Wynik usunięcia rekordu pracownika za
ALG4 124 Rozdział 5. Struktury danych Co jednak z dołączaniem elementów do listy? Poniżej są omówio
ALG0 130 Rozdział 5. Struktury danych Symboliczny stos znajdujący się pod każdą z sześciu grup inst
ALG6 136 Rozdział 5. Struktury danycł forfint i=0; i<4;i+~) kolejka.wstaw(tab[i)); for(i=0;

więcej podobnych podstron