• Nie Znaleziono Wyników

Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą danych: stosem.

N/A
N/A
Protected

Academic year: 2021

Share "Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą danych: stosem."

Copied!
1
0
0

Pełen tekst

(1)

ĆWICZENIE 3

Podstawowe dynamiczne struktury danych - stos

Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą danych: stosem.

I. PRZEBIEG ĆWICZENIA

Tworzenie elementarnego stuktury:

Uwaga: Typy danych przechowywanych w dowolnego rodzaju dynamicznych strukturach danych są oczywiście całkowicie dowolne. W tej instrukcji dane te oznaczane są dużymi literami, np. „DOL”, „ELEMENT 3”, itd. Zamiast tych nazw oczywiście używa się danych odpowiedniego typu (np. liczb typu int).

Każdą tworzoną dynamicznie strukturę należy utworzyć przy pomocy instrukcji wskaznik = new(TTypStrukturalny);

a następnie należy przypisać jego polom określone dane: Wskaznik jest najczęściej zwykłą zmienną statyczną (tworzoną przy pomocy TTypStrukturalny * Wskaznik).

Wskaznik

TTypStrukturalny * Wskaznik;

Wskaznik

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

SMIECI Wskaznik = new TtypStrukturalny;

Wskaznik

DANE

NIL

Wskaznik->DANE=Dane;

Wskaznik->Nastepny=NULL;

(2)

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:

ELEMENT NA WIERZCHOLKU

Element 2

Element 3

DÓL Wierzcholek

NIL

Rysunek 1 - Stos

Tworzenie stosu:

Wierzcholek

DÓL

NIL

Wierzcholek = new TTypStrukturalny;

Wierzcholek->DANE = DÓŁ;

Wierzcholek->Nastepny = NULL;

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

Najpierw należy utworzyć elementarną „cegiełkę”:

Wierzcholek

DÓL

Element 3 Tmp

NIL

NIL

Tmp = new TTypStrukturalny;

Tmp->DANE = Element_3;

Tmp->Nastepny = NULL; //To przypisanie w zasadzie nie jest konieczne, gdyż zaraz zostanie // zmienione

(3)

Następnie można połączyć tę nową „cegiełkę” z resztą stosu:

TMP

Element 3

Wierzcholek

NIL

DÓL

Tmp->Nastepny = Wierzcholek;

Ponieważ w przypadku stosu KONIECZNE jest zapewnienie, aby Wierzcholek wskazywał na rzeczywisty wierzchołek stosu:

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)

(4)

Dodawanie nowego elementu do stosu o dwóch elementach

Należy zauważyć, że dodawanie danych do stosu o dowolnym rozmiarze (od pustego stosu do utworzenia potrzebnej liczby elementów) przebiega zawsze w ten sam, omówiony wcześniej sposób:

Element 3 Wierzcholek

NIL

DÓL

Element 2 Tmp

NIL

Tmp = new TtypStrukturalny;

Tmp->DANE = Element_2;

Tmp->Nastepny = Wierzcholek;

Wierzcholek

NIL

DÓL Element 2 Tmp

Element 3

Wierzcholek = Tmp;

Wierzcholek

NIL

DÓL Element 2 Tmp

Element 3

(Prawie) gotowy stos;

Porównaj strzałkę (wskaźnik

Tmp->Nastepny)

(5)

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:

Przy usuwaniu elementu ze stosu również będzie niezbędne użycie pomocniczego wskaźnika Tmp.

Wierzcholek

NIL

DÓL Element 2

Element 3 TMP

ODCZYTAJ_DANE_ZE_STUKTURY(Wierzcholek->DANE); tmp=Wierzcholek->Nastepny;

Przygotowanie danych do usunięcia. Zmienna dynamiczna “Element 2” zostanie usunięta, jednak ustawienie pola

“Nastepny” na wartość NULL ułatwia odszukiwanie błędów. UWAGA: PRZED wykonaniem tego kroku (a więc przed

“odcięciem” zmiennej dynamicznej, na którą wskazuje wskaźnik “Wierzcholek” KONIECZNE jest zapewnienie, że na resztę struktury wskazuje jakiś inny wskaźnik – tutaj Tmp. Jeśli w dowolnej chwili to nie będzie spełnione, wtedy NIE MA MOŻLIWOŚCI NAPRAWY TEGO BŁĘDU - STRUKTURA ZOSTANIE NIEODWRACALNIE ZNISZCZONA!!!).

Wierzcholek

NIL

DÓL TMP

Element 2

NIL

Element 3

Wierzchołek->Następny=NULL;

Teraz można już usunąć element na wierzchołku stosu:

Te strzałki reprezentują pole

„następny” swoich rekordów

Ta strzałka to

Wierzchołek->Następny

(6)

Wierzcholek

NIL

DÓL TMP

Element 2

Element 3 SMIECI

delete Wierzcholek; /*Usunięcie zmiennej dynamicznej, na którą wskazuje wskaźnik Wierzcholek. Po wykonaniu tej linii, wskaźnik Wierzcholek NIE wskazuje na żaden użyteczny obszar pamięci (napisanie więc (*Wierzcholek) lub Wierzcholek->cokolwiek jest BŁĘDNE). */

Ponieważ wskaźnik Wierzcholek powinien zawsze wskazywać na wierzchołek stosu, dlatego konieczne jest jego ponowne ustawienie:

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. Od teraz Wierzchołek znowu wskazuje na użyteczną zmienną dynamiczną – na początek stosu).*/

Usuwanie pozostałych elementów realizuje się analogicznie.

Zadania:

1. Zaimplementować funkcję służącą do dodawania elementów do stosu

2. Zaimplementować funkcję służącą do usuwania elementów stosu. W przypadku próby usunięcia elementu z pustego stosu należy wypisać komunikat o błędzie.

3. Przy pomocy funkcji z p. 1 i 2, dodać do stosu po kolei liczby: 1,2,3,4,5,6,7,8,9,10.

Następnie usunąć wszystkie elementy. Po usunięciu każdego z nich wypisać wartość liczby

na ekranie.

Cytaty

Powiązane dokumenty

Odczekać, aż program dokończy wszystkie rozpoczęte pętle pomiarów (przycisk powróci do postaci )..

jest reprezentowana przez niezerowe wejście (u,v). Macierz sąsiedztwa jest wygodniejsza dla dla „gęstych” grafów.. Innymi słowy, każdy wierzchołek poprzedza wszystkie

Animatorzy kultury z Teatru NN czekali wczoraj na miesz- kańców kamienicy od godziny 10 do 17.- Przy sprzątaniu po- dwórka było więcej osób, dzia- ło się.. Myślę, że w

Zebrane wyniki dotyczące oznaczenia stężenia soli Mohra, próbki kontrolnej (zużycie tlenu do utlenienia zanieczyszczeń, które mogą być zawarte w odczynnikach) oraz próbki badanej

Użytkownik będąc przeprowadzany przez szkolenie powinien widzieć pasek postępu nauki i mieć możliwość przejścia do kolejnego tematu, a także cofnięcia się (Np. za

W każdym przypadku przygotuj specyfikację przeprowadzonego projektowania kompen- satora.. Dla poniższych układów wykonaj czynności opisane w uwagach

Jedną z nich (chyba najprostszą) jest użycie biblioteki SQLite która od wersji Python 2.5 jest już standardowo dostępna w ramach pytona.. Pomocna na zajęciach może być stron

Intuicyjnie można by postawić hipotezę (zwłaszcza dla analizy liniowo-sprężystej), że wpływ cza- su trwania utraty słupa na dynamiczną odpowiedź konstrukcji związany