ALG5

ALG5



5.1 Listy jednokierunkowe 105

Na rysunku 5-7 możemy przykładowo prześledzić jak powinna być wykonywana fuzja pewnych dwóch list x-(1.3,9) i y=(2,3,14), tak aby w jednej z nich znalazły się wszystkie elementy * i y oczywiście posortowane (w naszym przykładzie w kierunku wartości niemalejących).

Najmniejszym z dwóch pierwszych elementów list jest 1 i on też będzie stanowił zaczątek „nowej” listy. „Następnikiem” tego elementu będzie fuzja dwóch list: x' = (3,9) i y=(2.3,14). Jak dokonać fuzji list a-' i y? Dokładnie tak samo: bierzemy element 2, który jest najmniejszy z dwóch pierwszych elementów list x' i y... Można tak rekurencyjnie kontynuować aż do momentu, gdy natrafimy na przypadki elementarne: jeśli jedna z list jest pusta, to fuzją ich obu będzie oczywiście ta druga lista. Na tej zasadzie jest skonstruowana procedura fu-zja(obl,ob2), która wywołana z dwoma parametrami obi i oh2 zwróci w' liście obi sumę elementów list obi i ob2. Lista ob2 jest w wyniku tej operacji zerowana, choć jej całkowite usunięcie pozostaje ciągle w gestii programisty (taki jest nasz wybór - równie dobrze można by to zrobić od razu).

Rys. 3- 7.

etap 0

: Fuzja list

na przykładzie.

etap 1

etap 2

etap 3

etap 4

etap 5

etap 6


CIHEKEh HHI>® HHIKU1 Lć_HZ>0) HUTNIKU {EHE* OZHEM3EEIKIMIHnLhB)



Nasze zadanie wykonamy w dość nietypowy dla C++ sposób, który ma na celu ukazanie zakresu możliwych zastosowań tzw. funkcji zaprzyjaźnionych z klasą. Przypomnijmy, iż są to funkcje (lub procedury), które nie będąc metodami danej klasy, mają dostęp do zastrzeżonych pól private i protccted) obiektu, którego adres został im przekazany jako jeden z parametrów wywołania. Ponieważ nie są to metody, nie mogą być wywoływane w ramach notacji z kropką, a ponadto obiekt, na klóry mają działać, musi im zostać przekazany w sposób jawny - na przykład poprzez swój adres.

Fuzję list wykonamy w dwóch etapach. Wpierw przygotujemy prostą funkcję, która otrzymując dwie posortowane listy a i b. zwróci jako wynik listę, która


Wyszukiwarka

Podobne podstrony:
ALG 5 5.1 Listy jednokierunkowe 95 w tej książce dla uproszczenia operuje się głównie wartościami ty
ALG5 5.1. Listy jednokierunkowe 115 I res->gIowa=przed; res->oqon=pos; return (ras) ; } 1 •
ALG9 5,1. Listy jednokierunkowe 109 Poruszony powyżej problem był na tyle charakterystyczny dla wie
PRZEDSZKOLAK UCZY SIĘ PISAĆ 5 6 LAT 5 Listy Przeczytaj imiona na koszulkach i listach. Każdy list
ALG 7 5.1. Listy jednokierunkowe 97 public: int pusta()    // czy lista jest pusta? {
ALG 9 5.1. Listy jednokierunkowe 99 stawałby się on wówczas automatycznie głową listy i musiałby zos
ALG1 5.1 Listy jednokierunkowe 101 5.1 Listy jednokierunkowe 101 ELEMENT Aprzed=NULL,*po=inf.głowa;
ALG3 5.1 Listy jednokierunkowe 103 noprawny obiekt - może aktywować dowolną metodę swojej klasy, cz
ALG7 5.1. Listy jednokierunkowe 107 cout « "L2 = for (i=0; i<n; 12.dorzuc2(tab2[i++])) ; 12
ALG1 5.1. Listy jednokierunkowe 111 i zarobków. (Rozbudowa tych struktur danych nie wniosłaby konce
ALG3 5.1 Listy jednokierunkowe 113 int wzor(int x,int(*fun)(int!) [ return fun(x); ) void main(} i
ALG7 5.1. Listy jednokierunkowe 117 Mając już komplet funkcji pusta, zestaw funkcji decyzyjnych i u
ALG9 5.1. Listy jednokierunkowe 119 wartość zwracaną przez funkcję: w normalnej sytuacji winien to
ALG1 5.1 Listy jednokierunkowe 121 } cout << "


więcej podobnych podstron