Przeczytaj
Rekord a struktura
Rekord pozwala na przechowywanie danych z zachowaniem pewnej abstrakcyjnej struktury. Rekord składa się z różnych typów danych połączonych w całość. Przykładowo, wyobraźmy sobie, że jesteśmy właścicielami firmy i chcemy napisać program, który ułatwi nam zarządzanie pracownikami. Program będzie działał, wykorzystując dane osobowe, takie jak imię, nazwisko, PESEL czy adres zamieszkania.
Moglibyśmy wszystkie potrzebne informacje przechowywać w oddzielnych tablicach. Wtedy w i
-tej komórce każdej tablicy znajdowałyby się dane i
-tego pracownika. Jednak taki sposób przechowywania danych jest niewygodny i mało intuicyjny. Skorzystajmy zatem z rekordu, często nazywanego również strukturą.
Struktura i rekord koncepcyjnie odpowiadają temu samemu modelowi danych. Przyjęło się jednak, że słowo rekord jest powiązane głównie z bazami danych, natomiast słowo struktura - z programowaniem.
Przeanalizujmy poniższy pseudokod:
Definiując strukturę, musimy na samym początku zaznaczyć, jakie będą jej składowe. Każda z nich powinna mieć unikalną nazwę, za pomocą której będziemy mogli się odwoływać do jej konkretnej zawartości. Mówimy wtedy, że składowe są etykietowalne.
Firma może zatrudniać bardzo dużą liczbę pracowników, dlatego deklarowanie każdego z nich oddzielnie nie jest dobrym pomysłem. Możemy jednak utworzyć tablicę stuelementową o typie struktury Pracownik
. Przeanalizujmy zatem jeszcze jeden pseudokod:
Dzięki takiemu rozwiązaniu możemy w łatwy sposób utworzyć dużą liczbę zmiennych o typie wymyślonej struktury. Jest to bardzo wygodny i czytelny sposób pracy nad danymi, które posiadają pewną wewnętrzną abstrakcyjną strukturę.
Zagnieżdżanie struktur i tablice jako składowe
Struktury są bardzo elastyczne, jeśli chodzi o możliwe typy ich składowych. Mogą nimi być nawet tablice czy choćby inne struktury. Dzięki temu możemy tworzyć bardziej zaawansowane obiekty, które ułatwią nam pracę nad danymi.
Przeanalizujmy przykład takiej struktury:
Aby dostać się do konkretnej składowej zagnieżdżonej struktury, najpierw musieliśmy sprecyzować, że odwołujemy się do pola dane
o typie Dane_osobowe
, a następnie do składowej imie
. Osiągnęliśmy to za pomocą instrukcji p.dane.imie <-- "Jan"
.
Za to w przypadku tablicy musieliśmy podać konkretny indeks komórki. W powyższym pseudokodzie skorzystaliśmy z tablicy statycznej, zatem w definicji struktury musimy podać jej rozmiar. Dzięki temu każda zmienna o typie Pracownik
będzie zawierać 50‑elementową tablicę.
Przykładowe zastosowania
Struktura jest uniwersalna i może być wykorzystywana do różnych celów. Tak jak w zaprezentowanym wcześniej przykładzie, nadaje się ona do pracy na obiektach mających pewne etykietowalne własności.
Zastanów się, jakie inne zastosowania może mieć struktura.
Struktury mogą być także wykorzystywane do implementacji bardziej zaawansowanych struktur danych, takich jak lista czy drzewo. W liście dwukierunkowej każdy element przechowuje swoje wartości oraz wskaźnik do poprzednika i następnika. Wykorzystując strukturę, jesteśmy w stanie zaimplementować to w dosyć wygodny sposób.
Natomiast w przypadku drzewa binarnegodrzewa binarnego każdy węzeł przechowuje swoją wartość, wskaźnik do ojca oraz synów – lewego i prawego. Tutaj również wykorzystanie struktury wydaje się dosyć intuicyjne i naturalne.
Zastanów się, czy widzisz jakieś zastosowanie struktury dla siebie.
Słownik
specjalny rodzaj drzewa, w którym każdy węzeł może mieć maksymalnie dwóch synów