• Nie Znaleziono Wyników

I. PRZEBIEG ĆWICZENIATworzenie elementarnego rekordu:Uwaga: Typy danych przechowywanych w dowolnego rodzaju dynamicznych strukturach danych są oczywiście całkowicie dowolne.

N/A
N/A
Protected

Academic year: 2021

Share "I. PRZEBIEG ĆWICZENIATworzenie elementarnego rekordu:Uwaga: Typy danych przechowywanych w dowolnego rodzaju dynamicznych strukturach danych są oczywiście całkowicie dowolne."

Copied!
1
0
0

Pełen tekst

(1)

ĆWICZENIE 2

Podstawowe dynamiczne struktury danych - stos, kolejka FIFO, lista jednokierunkowa

Celem ćwiczenia jest zapoznanie studentów z podstawowymi dynamicznymi strukturami danych:

stosem, kolejką FIFO (First In, First Out - pierwszy wchodzi, pierwszy obsłużony) i listą jednokierunkową.

I. PRZEBIEG ĆWICZENIA

Tworzenie elementarnego rekordu:

Uwaga: Typy danych przechowywanych w dowolnego rodzaju dynamicznych strukturach danych są oczywiście całkowicie dowolne.

Każdy tworzony dynamicznie rekord należy utworzyć przy pomocy instrukcji new(Wskaznik) a następnie należy przypisać jego polom określone dane: Wskażnik jest najczęściej zwykłą zmienną statyczną (tworzoną przy pomocy var).

Wskaznik

var Wskaźnik : TWskażnikDoRekordu;

Wskaznik

????????????? SMIECI ??????????

SMIECI new(Wskaźnik);

Wskaznik

DANE

NIL

Wskaźnik^.DANE:=Dane;

Wskaźnik^.Nastepny:=nil;

Stos:

Stos jest dynamiczną strukturą danych, w której dołączanie i usuwanie elementów zachodzi

tylko w jednym miejscu: na wierzchołku. Stos można wyobrazić sobie jako stos książek: chcąc

wyjąć jedną, należy wcześniej wyjąć wszystkie znajdujące się powyżej:

(2)

ELEMENT NA WIERZCHOLKU

Element 2

Element 3

DÓL Wierzcholek

NIL

Rysunek 1 - Stos

Tworzenie stosu:

Wierzcholek

DÓL

NIL

new(Wierzcholek); Wierzcholek^.Data: = DOL; Wierzcholek^.Nastepny: = nil;

(To już jest stos, tyle, że nieco mało użyteczny.... Od teraz dodawanie każdego nowego elementu będzie przebiegało identycznie)

Wierzcholek

DÓL

Element 3 Tmp

NIL

NIL

new(Tmp); Tmp^.Dane: = Element_3; Tmp^.Nastepny: = nil;

TMP

Element 3

Wierzcholek

NIL

DÓL

Tmp^.Nastepny: =Wierzcholek;;

(3)

TMP

Element 3 Wierzcholek

NIL

DÓL

Wierzcholek: = Tmp;

Element 3 Wierzcholek

NIL

DÓL

(Gotowy stos; Zmienna Tmp nie jest już potrzebna i można ją wykorzystać do innych celów)

Element 3 Wierzcholek

NIL

DÓL

Element 2 Tmp

NIL

new(Tmp); Tmp^.Dane: = Element_2; Tmp^.Nastepny: = nil;

Wierzcholek

NIL

DÓL Element 2 Tmp

Element 3

Wierzcholek: = Tmp;

Porównaj strzałkę

(wskaźnik tmp^następny)

(4)

Wierzcholek

NIL

DÓL Element 2 Tmp

Element 3

Wierzcholek

NIL

DÓL Element 2

Element 3

Gotowy stos; Zmienna Tmp nie jest już potrzebna i można ją wykorzystać do innych celów.

Dodawanie pozostałych elementów następuje analogicznie.

Usuwanie elementów ze stosu:

Wierzcholek

NIL

DÓL Element 2

Element 3 TMP

tmp:=Wierzcholek^.Nastepny; ODCZYTAJ_DANE_Z_REKORDU(Element_2);

Wierzcholek

NIL

DÓL TMP

Element 2

NIL

Element 3

Wierzchołek^.Następny:=nil;

Te strzałki reprezentują pole

„następny” swoich rekordów

Ta strzałka to

Wierzchołek^.Następny

(5)

Wierzcholek

NIL

DÓL TMP

Element 2

Element 3 SMIECI

dispose(Wierzcholek);

Wierzcholek

NIL

DÓL

TMP Element 3

Wierzchołek:=Tmp; (Zmienna TMP nie jest już potrzebna i może zostać użyta do innych celów) Usuwanie pozostałych elementów realizuje się analogicznie.

Kolejka FIFO

Kolejka FIFO jest nieco bardziej skomplikowana. Zgodnie z nazwą jej budowa przypomina kolejkę do kasy - ten, kto najwcześniej stanął jest obsługiwany jako pierwszy; kto najpóźniej – jako ostatni.

11 22 33

Ostatni

NIL

Kolejka FIFO

Tworzenie kolejki FIFO:

Ostatni

NIL

var Ostatni:TwskaźnikDoRekordu; Ostatni:=nil;

Ostatni

???

SMIECI new(Ostatni);

(6)

Ostatni

11

NIL

Ostatni^.Dane:=11 Ostatni

11

NIL

???

TMP

SMIECI Var Tmp: TWskażnikDoRekordu;

new(Tmp);

Ostatni

11

NIL

22 TMP

NIL

Tmp^.Dane:=22; Tmp^.Następny:=nil;

Pojawia się problem - gdzie wstawić TMP?

Chcemy taką sytuację:

Ostatni

11 22

TMP

NIL

Otrzymamy powyższy, poprawny wynik, jeśli napiszemy:

Ostatni^.Następny:= TMP; (Zmienna TMP nie będzie już do tego celu potrzebna.) Ostatni

11 22

NIL

Gotowa kolejka FIFO. Gotowa do wstawienia nowego elementu:

Ostatni

11 22

???

NIL

TMP

SMIECI Var Tmp: TWskażnikDoRekordu;

new(Tmp);

Można uzyskać dostęp do całego tego rekordu za pomocą:

Ostatni^

Skoro tak, to

Ostatni^.Następny

to poszukiwane miejsce do

wstawienia nowego rekordu!

(7)

Ostatni

11 22

33

NIL

TMP

NIL

Tmp^.Następny:=nil; Tmp^.Dane:=33;

POJAWIA SIĘ TEN SAM PROBLEM, TYLE, ŻE TRUDNIEJSZY! GDZIE WSTAWIĆ TMP?

Chcemy taką sytuację:

Ostatni

11 22 33

TMP

NIL

SENSOWNE ROZWIĄZANIE PROBLEMU – PĘTLA PO WSZYSTKICH ELEMENTACH, KTÓRA ZAKOŃCZY SIĘ, GDY Element^.Następny=nil Wracając do poprzedniego rysunku:

Ostatni

11 22

33

NIL

TMP

NIL

Elem

var Elem:TwskaźnikDoRekordu;

Elem: = Ostatni;

Ostatni

11 22

33

NIL

TMP

NIL

Elem Czy

Elem^.Nastepny=NIL?

Czy Elem^.następny = NIL?

Ostatni

11 22

33

NIL

TMP

NIL

Elem

W tym miejscu trzeba wstawić

TMP, zamiast NIL

(8)

NIE! Więc idziemy dalej, tak długo, aż znajdziemy taki element...

Elem:=Elem^.Następny;

Ostatni

11 22

33

NIL

TMP

NIL

Elem Czy

Elem^.Nastepny=NIL?

Czy Elem^.następny = NIL?

TAK! Mamy miejsce do wstawienia TMP!!

Ostatni

11 22 33

TMP

NIL

Elem

Wstawiamy więc:

Elem^.Następny:=Tmp;

Ostatni

11 22 33

NIL

Zmienne Elem i Tmp nie będą już potrzebne do rozwiązania zadania. Tak wygląda gotowa kolejka FIFO.

Usuwanie elementu z kolejki FIFO:

Ponieważ jest to kolejka, usuwanie elementów dopuszczalne jest tylko na końcu kolejki (w miejscu wskazanym przez

„Ostatni”). Sprawa jest banalnie prosta:

Ostatni

11 22 33

NIL

TMP

var Tmp: TwskaznikDoRekordu;

Tmp:=Ostatni^.Następny;

Ostatni 11 22 33

NIL

TMP

SMIECI Ostatni^.Następny:=NIL;

Dispose(Ostatni);

Ostatni

22 33

NIL

TMP

Ostatni:=Tmp;

(9)

Ostatni

22 33

NIL

Zmienna Tmp nie jest już potrzebna do wykonania zadania.

Usuwanie pozostałych elementów przebiega analogicznie.

II. ZADANIA

1. Napisać procedury i/lub funkcje służące do wykonywania operacji wstawiania nowego elementu i usuwania elementu ze stosu:

ELEMENT NA WIERZCHOLKU

Element 2

Element 3

DÓL Wierzcholek

NIL

2. Napisać procedury i/lub funkcje służące do wykonywania operacji wstawiania nowego elementu i usuwania elementu z „Odwróconego” stosu. DODAWANIE I USUWANIE ELEMENTÓW ZACHODZI NA WIERZCHOŁKU, a więc w miejscu najbardziej odległym od wskaźnika „DÓŁ” i najbliższemu „NIL”. Zwrócić uwagę na

nieefektywność takiej struktury (jest to przykład czysto dydaktyczny; takie struktury z uwagi na nieefektywność nie są stosowane lub stosowane są nadzwyczaj rzadko).

ELEMENT NA WIERZCHOLKU

Element 2

Element 3

DÓL DÓL

NIL

3. Napisać procedury i/lub funkcje służące do wykonywania operacji wstawiania nowego elementu i usuwania elementu z kolejki FIFO:

Ostatni

22 33

NIL

4. Napisać procedury i/lub funkcje służące do wykonywania operacji wstawiania nowego elementu i usuwania elementu z innego rodzaju kolejki FIFO:

Pierwszy

11 22

NIL

Dodawanie nowych danych odbywa się w miejscu wskazanym przez wskaźnik Pierwszy, usuwanie zaś – przy elemencie najbliższym NIL (a więc najbardziej odległym od Pierwszy):

(10)

33 Pierwszy

11 22

NIL

Kolejka FIFO z dołączonym pierwszym elementem „33”.

Przy usuwaniu, zostanie usunięty element „22”.

Cytaty

Powiązane dokumenty

Utwórz widok TLista, który wyświetl listę pracowników urodzonych w listopadzie, których nazwiska zaczynają się na literę B.. Utwórz widok TRok, który wyświetli

(a) Crystal/NMR structures of the 1 subunits from Bacillus PS3 (PDB-ID: 2E5Y), Escherichia coli (PDB-ID:1AQT), Thermosynechococcus elongates BP-1 (PDB- ID: 2RQ6) and

● Losowe z zastępowaniem jest odmianą wyboru losowego, gdy każdy obiekt może być wylosowany więcej niż raz. Ten rodzaj losowania gwarantuje ze każdy element jest losowany

W przypadku procedury Wielkanoc mieliśmy jeden parametr wywoływany przez wartość (R:Integer) i dwa parametry wywoływane przez zmienną (var X,Y:Integer).. Wywoływanie

funkcje we/wy dla danych umieszczonych w kolejce void Pokaz_dane (dane Dana);.

Podczas usuwania należy po usunięciu każdego elementu zmniejszyć wartość indeksu i, aby wznowić proces wyszukiwania elementu do usunięcia od elementu.. przesuniętego z

Klasa abstrakcyjna może zawierać metody abstrakcyjne, poprzedzone słowem kluczowym abstract; w miejscu ciała metody abstrakcyjnej występuje średnik; każda jej podklasa musi

W oparciu o rozdział Typy strukturalne, czyli jak przechować więcej danych napisz program, który stworzy tablicę a następnie zapyta użytkownika o kolejne jej