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, czALG5 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 tyALG 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 zosALG1 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ć wyALG7 5.1. Listy jednokierunkowe 107 cout « "L2 = for (i=0; i<n; 12.dorzuc2(tab2[i++])) ; 12ALG9 5,1. Listy jednokierunkowe 109 Poruszony powyżej problem był na tyle charakterystyczny dla wieALG1 5.1. Listy jednokierunkowe 111 i zarobków. (Rozbudowa tych struktur danych nie wniosłaby konceALG7 5.1. Listy jednokierunkowe 117 Mając już komplet funkcji pusta, zestaw funkcji decyzyjnych i uALG9 5.1. Listy jednokierunkowe 119 wartość zwracaną przez funkcję: w normalnej sytuacji winien toALG1 5.1 Listy jednokierunkowe 121 } cout << "STUDIUM PRZYPADKU IMPLEMENTACJA LISTY WSKAŹNIKOWEJ 119 int main () { unsigned long i = 3; /• szukanyALG 1 4.4. Uwagi praktyczne 91 4.4. Uwagi praktyczne 91 quick-gcc.cc int comp(const void *x, const vALG 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 pALG7 5.2. Tablicowa implementacja list 1275.2.3.Listy innych typów Listy jednokierunkowe są bardzoALG0 180Rozdział 6. Derekursymijii 6.6, void main() ( for (int i=0; i<17;i++) (Pl(i,b); cout « bwięcej podobnych podstron