ALG0
140 Rozdział 5. Struktury danych
porządek. Czy czasem owa procedura nie jest na tyle kosztowna, że ewentualny | zysk z użycia steily nie jest już tak oczywisty? Na szczęście okazuje się, że nie. I Wszelkie algorytmy operujące na stercie wykonują się wprost proporcjonalnie do I długości drogi odwiedzanej podczas przechodzenia przez drzewo binarne repre- I zentujące stertę. Co można powiedzieć o tej długości wiedząc, że drzewo binarne 1 jest kompletne? Na przykład to, iż dowolny wierzchołek jest odległy od wierz- I chołka (korzenia) o co najwyżej log?/V węzłów! Z tego właśnie powodu algo- i rytmy „stertowe” wykonują się na ogół w czasie „logarytmicznym”. Jest to dobry I wynik decydujący często o użyciu tej, a nie innej struktury' danych.
Po tak długim wstępie warto wreszcie zaprezentować kilka linii kodu w C++, które lepiej przemówią niż przewlekłe wyjaśnienia. Definicja klasy I Sterta1 jest następująca:
sterta.h
elass sterta
I
private: int *t;
int L; // ilość elementów
public:
Sterta(int nMax) // prosty konstruktor
(
t-new int!nMax+l);
L=0;
)
void wstaw(int x); int obsłuż(); void DoGoryl); void NaDol(); void pisz ();
); // koniec definicji klasy Sterta
Konstruktor klasy tworzy tablicę, w której będą zapamiętywane elementy -1[0] I jest nieużywane, stąd deklaracja tablicy o rozmiarze nMax+l, a nie nMcix (jest I to szczegół implementacyjny ukryty przed użytkownikiem).
Na początek zajmijmy się wstawieniem nowego elementu do sterty;
void Sterta::wstaw(int x)
{
t[++L)=x;
DoGory(); ł
Procedura DoGory była już wcześniej wzmiankowana: zajmuje się ona przywróceniem porządku w stercie po dołączeniu na koniec tablicy t nowego elementu.
1
Aby nie rozwlekać kodu nadmiernym generalizowaniem, podany zostanie przykład dla sterty liczb całkowitych.
Wyszukiwarka
Podobne podstrony:
ALG0 120 Rozdział 5. Struktury danych i if (pos!=q) rsturn(O); II element nieAlg0 120 Rozdział 5. Struktury danych i if (pos!=q) rsturn(O); II element nieALG0 110 Rozdział 5. Struktury danych Rysunek 5-9 zawiera już kilka nowości w porównaniu z tym, coALG0 130 Rozdział 5. Struktury danych Symboliczny stos znajdujący się pod każdą z sześciu grup instALG2 142 Rozdział 5. Struktury danych a ż do momentu znalezienia właściwego dlań miejsca. PopatrzmyALG6 156 Rozdział 5. Struktury danya Proces przechadzania się po drzewie nie jest bynajmniej zakońcALG6 116 Rozdział 5. Struktury danych Iisla2.li int alfabetycznie(ELEMENT *q],ELEMENT *q2) { II czyALG 4 94 Rozdział 5. Struktury danych5.1. Listy jednokierunkowe Lista jednokierunkowa jest oszczędnąALG 6 96 Rozdział 5. Struktury danych Rys. 5 - 3. FCOOh FCI4h FFEEh Przykład listy jedno-kierunkALG 8 98 Rozdział 5. Struktury danych W następnych paragrafach zostaną przedstawione wszystkie metodALG0 100 Rozdział 5. Struktury danyi z tych przypadków w istniejącej liście trzeba znaleźć miejsceALG2 102___Rozdział 5. Struktury danych I ELEMENT *q=inf.głowa; if (pusta()) cout << "(lALG4 104 Rozdział 5, Struktury danych dla danego obiektu wykonanie na sobie operacji „dekrementacjiALG8 108__Rozdział 5. Struktury danych5.1.3.Listy jednokierunkowe - teoria i rzeczywistość Oprócz pALG2 112 Rozdział 5. Struktury danych 112 Rozdział 5. Struktury danych //rekord informacyjny listyALG4 114 Rozdział 5. Struktury danych stan—ZAKOŃCZ; else { przcd=po; po=po->nastepny; I RóżnicaALG8 118 Rozdział 5. Struktury danych if(pŁzed==NULL) // wstawiamy na początek listy ( inf_ptr[nr].ALG2 122 Rozdział 5. Struktury danych Czerniak zarabia 3000zl Wynik usunięcia rekordu pracownika zaALG4 124 Rozdział 5. Struktury danych Co jednak z dołączaniem elementów do listy? Poniżej są omówiowięcej podobnych podstron