STRUKTURY DANYCH Tablice Koncepcyjna organizacja danych a rozmieszczenie w pamięci Fortran C x[0] x[4] X(1) X x x+4 x[n][m] x[0][0] x x[0][4] x+4 x[i][j] x+i*(m+1)+j x[0][0] x[0][1] x[0][2]…….. x[0][m] x[1][0] x[1][1] x[1][2]… .. x[1][m] x[2][0] . . x[n][0] x[n][1] x[n][2].. .. x[n][m] X(4) X+3 x(n,m) X(1,1) x X(4,1) x+3 X[i][j] x+(j-1)*n+j-1 X(1,1) X(2,1) X(1,2) X(2,2) X(1,3)… X(2,3)… X(1,m) X(2,m) . . . X(n,1) X(n,2) X(n,3)… X(n,m) Listy • Struktura dynamiczna (zmieniające się rozmiary i kształt danych) • Wskaźniki (pointers) – komórki pamięci zawierające adres (licznik rozkazów) • Np. Dane ułożone w pamięci wg. jednego klucza (tytuł płyty); każdy rekord zawiera wskaźnik do kolejnego wg. innego klucza (nazwisko wykonawcy) • Po zaimplementowaniu dla programisty lista - narzędziem abstrakcyjnym Listy zwarte • Cała lista zapamiętana w kolejnych komórkach pamięci (spójny blok) • Każdy element tej samej długości (uzupełniony spacjami) • Implementacja – tablica: – – 1 wiersz – 1 element listy liczba kolumn – np.liczba znaków elementu listy • Problemy – dodawanie i usuwanie elementów listy (wymaga przesunięcia, przekopiowania) K o n _ _ _ _ _ | S l o n _ _ _ _ | P i e s _ _ _ _ | K r o w a _ _ _ | L i s _ _ _ _ _ K S P K L o l i r i n o e o s _ n s w _ _ _ _ a _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Listy z dowiązaniami • Poszczególne elementy listy pamiętane w różnych komórkach pamięci ( nie spójny blok) • Każdy element tej samej długości- umieszczony w spójnym bloku pamięci (uzupełniony spacjami + ostatnia dodatkowa komórka – wskaźnik do następnego elementu) • Lista rozproszona na bloki powiązane wskaźnikami • Początek listy – głowa – nagłówek ( 1-szy element + wskaźnik) usunięcie elementu Pies • Koniec – wskaźnik NIL (0) P i e s _ _ _ _| K o n _ _ _ _ _| S l o n _ _ _ _| K o t _ _ _ _ _ | dodanie elementu Kot L i s _ _ _ _ _|NIL Listy • Implementacja listy – procedury: – Wstawianie elementu – Usuwanie elementu – Wyszukiwanie elementu na liście – Wypisywanie listy Stosy • lista • wstawianie i usuwanie możliwe tylko na końcu struktury • struktura LIFO (Last-In First-Out) • wierzchołek stosu (top); dno (base) • wstawianie obiektu – włożenie (push) • usunięcie obiektu - zdjęcie (pop) Stosy • zastosowanie – wywołanie programu z procedurami • na stosie zapamiętane wskaźniki do lokacji powrotu • stosy – proces nawrotów • stos umożliwia odtworzenie stanu systemu w kolejności odwrotnej do wchodzenia do tych stanów Wywoływanie procedur Pr. Gł. Proc. A Proc. B Proc. C kończenie procedur Stosy • zastosowanie – wypisanie elementów z listy z dowiązaniami w odwrotnej kolejności • wkładanie na stos kolejno wszystkich elementów listy • zdejmowanie ze stosu Kon, Kot, Slon, Lis Lis Slon Kot Kon Lis, Slon, Kot, Kon Stosy • implementacja – rezerwacja ciągłego obszaru pamięci • rozmiar bloku – kluczowa decyzja • dno stosu – koniec bloku • wierzchołek stosu – przemieszczalny • wskaźnik stosu (stack pointer) = adres wierzchołka stosu • implementacja stosu – procedury: • Wkładanie elementu • Zdejmowanie elementu • Sprawdzanie czy stos pusty • Sprawdzanie czy stos pełny Stosy • implementacja 2 – struktura z powiązaniami • brak ograniczenia na rozmiar • Struktura koncepcyjna inna niż rozmieszczenie w pamięci Kolejki • Struktura listowa • wstawianie elementów – na jednym końcu - koniec ogon • Usuwanie elementów – z drugiego końca – początek głowa • FIFO Kolejki • Implementacja: – zwarty blok pamięci – Wskaźnik początku (head pointer) – Wskaźnik końca (tail pointer) • Kolejka pusta: wskaźnik początku = wskaźnik końca • Wskaźnik końca – wskazuje na 1-szą wolną pozycję Kolejki początek początek początek A A początek B koniec B koniec koniec koniec Kolejka pusta A AB B Kolejki PROBLEM • Przemieszczanie się kolejki po przestrzeni pamięci • Rozwiązanie 1: przemieszczanie elementów w kierunku początku w miarę usuwania elementów – nieefektywne • Rozwiązanie 2: kolejka cykliczna w wydzielonym bloku pamięci – Ostatnia komórka sąsiaduje z pierwszą KOLEJKI Wskaźnik początku Pierwsza komórka Pierwsza komórka H A B C C D D E E F F Wskaźnik końca G ostatnia komórka ostatnia komórka Wskaźnik końca Wskaźnik początku Kolejki • Implementacja: – Zbiór komórek – Zestaw procedur: • Wstawianie elementu • Usuwanie elementu • Sprawdzanie czy pusta • Sprawdzanie czy zapełniona