ALG3

ALG3



5.1 Listy jednokierunkowe 113

int wzor(int x,int(*fun)(int!)

[

return fun(x);

)

void main(}

i

cout << "Wzór 1:"<< wzór|10,de_2) << endl; cout << "Wzór 2:"s< wzór (10, do_4) <s endl;

}

Funcja wzór zwraca - w zależności od tego, czy zostanie wywołana jako wzorflO.do2), czy też w:or(10.do_4) - odpowiednio 100 lub 10000. Mamy tu do czynienia z podobnym fenomenem, jak w przypadku tablic; nazwa funkcji jest jednocześnie wskaźnikiem do niej. Bezpośrednią konsekwencją jest dość naturalny sposób użycia, pozwalający na uniknięcie typowych dla C++ operatorów * (gwiazdka) i & (operator adresowy).

Inny przykład: procedura/, która otrzymuje jako parametr liczbę a- (typu im) i wskaźnik do funkcji o nazwie g (zwracającej typ double i operującej trzema parametrami: int, double, i char*), może zostać zadeklarowana w następujący sposób:

void f(int x, double (*g) (int, double, char *))

i

k=<j (12,5.345, "1984 "! ; cout « k << endl;

I

Zakres stosowania wskaźników do funkcji jest dość szeroki i przyczynia się do uogólnienia wielu procedur i funkcji.

Powróćmy teraz do odsuniętych chwilowo na bok list i zajmijmy się problemem wstawiania nowego elementu do listy uprzednio posortowanej. Chcemy znaleźć dwa adresy: przed i po (patrz rysunek 5 - 6). które umożliwią nam takie zmodyfikowanie wskaźników, aby cala lista była widziana jako posortowana. W tym celu zmuszeni jesteśmy do użycia pętli while poznanej na stronie 101:

while((Stan==SZOKAJ) S& <po!=NULL)! if (po->zarobek>=x) stan=ZAKONCZ ;

else

I

przed=po;

po=po->nastcpny;

I

Gdybyśmy zaś chcieli usunąć pewien element listy, który spełnia przykładowo warunek, że pole zarobek wynosi 1200 zł. to również będą nam potrzebne wskaźniki przed i po. Odnajdziemy je w sposób następujący:

while! (stan==SZ0KAJ) &!. (po!=NULL)) if (po->zarobek==1200)


Wyszukiwarka

Podobne podstrony:
ALG3 5.1 Listy jednokierunkowe 103 noprawny obiekt - może aktywować dowolną metodę swojej klasy, cz
ALG5 5.1. Listy jednokierunkowe 115 I res->gIowa=przed; res->oqon=pos; return (ras) ; } 1 •
ALG 5 5.1 Listy jednokierunkowe 95 w tej książce dla uproszczenia operuje się głównie wartościami ty
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;
ALG5 5.1 Listy jednokierunkowe 105 Na rysunku 5-7 możemy przykładowo prześledzić jak powinna być wy
ALG7 5.1. Listy jednokierunkowe 107 cout « "L2 = for (i=0; i<n; 12.dorzuc2(tab2[i++])) ; 12
ALG9 5,1. Listy jednokierunkowe 109 Poruszony powyżej problem był na tyle charakterystyczny dla wie
ALG1 5.1. Listy jednokierunkowe 111 i zarobków. (Rozbudowa tych struktur danych nie wniosłaby konce
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 << "

STUDIUM PRZYPADKU IMPLEMENTACJA LISTY WSKAŹNIKOWEJ 119 int main () { unsigned long i = 3; /• szukany
ALG 1 4.4. Uwagi praktyczne 91 4.4. Uwagi praktyczne 91 quick-gcc.cc int comp(const void *x, const v
ALG 4 94 Rozdział 5. Struktury danych5.1. Listy jednokierunkowe Lista jednokierunkowa jest oszczędną
ALG8 108__Rozdział 5. Struktury danych5.1.3.Listy jednokierunkowe - teoria i rzeczywistość Oprócz p
ALG7 5.2. Tablicowa implementacja list 1275.2.3.Listy innych typów Listy jednokierunkowe są bardzo
ALG0 180Rozdział 6. Derekursymijii 6.6, void main() ( for (int i=0; i<17;i++) (Pl(i,b); cout « b

więcej podobnych podstron