STRUKTURY DANYCH

advertisement
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
Download