39026

39026



STUDIUM PRZYPADKU IMPLEMENTACJA LISTY WSKAŹNIKOWEJ 119 int main ()

{

unsigned long i = 3; /• szukany liczb pierwszych w zakresie od 3 do 1000 •/ const unsigned long END * 1000; first » malloc (sizeof(el.listy));

£irst->val - 2;

£irst->next ■ NULL; for (;i!=END;++i) {

if (jest_piervsza(first, i)) dodaj_do_listy (first, i);

>

vypisz_liste(first); return 0;

Możemy jeszcze pomyśleć, jak można by wykonać usuwanie elementu z listy. Najprościej byłoby zrobić:

vsk->next = vsk->next->next

ale wtedy element, na który wskazywał wcześniej wsk->next przestaje być dostępny i zaśmieca pamięć. Trzeba go usunąć. Zauważmy, że aby usunąć element potrzebujemy wskaźnika do elementu go poprzedzającego (|x> to. by nie rozerwać listy). Popatrzmy na poniższą funkcję:

void usun_z_listy(el_listy *lista, int element)

{

el.listy ‘wsk-lista; while (wsk->next !* NULL)

{

if (wsk->next->val == element) /• musimy nieć wskaźnik do elenentu poprzedzającego */

{

el.listy *usuwany»wsk->next; /• zapamiętujemy usuwany element •/

wsk->next ■ usuwany->next;    /• przestawiany wskaźnik next by onijal usuwany element */

free(usuwany);    /• usuwamy z pamięci */

> else

{

wsk * wsk->next;    /» idziemy dalej tylko wtedy kiedy nie usuwaliśmy »/

>    /• bo nie chcemy zostawić duplikatów */

}

>

Funkcja ta jest tak napisana, by usuwała z listy wszystkie wystąpienia danego elementu (w naszym |)rogramie nie ma to miejsca, ale lista jest zrobiona tak, że może trzymać dowolne liczby). Zauważmy, że wskaźnik wsk jest przesuwany tylko wtedy, gdy nie kasowaliśmy.

Gdybyśmy zawsze go przesuwali, przegapilibyśmy element gdyby występował kilka razy pod rząd.

Funkcja ta działa poprawnie tylko wtedy, gdy nie chcemy usuwać pierwszego elementu.

Można to poprawić dodając instrukcję warunkową do funkcji lub dodając do listy “głowę" pierwszy element nie przechowujący niczego, ale upraszczający operacje na liście.

Zostawiamy to do samodzielnej pracy.

Cały powyższy przykład omawiał tylko jeden przypadek listy — listę jednokierunkową.

Jednak istnieją jeszcze inne typy Ust, np. lista jednokierunkowa cykliczna, lista dwukierunkowa oraz dwukierunkowa cykliczna. Różnią się one od siebie tylko tym. że:



Wyszukiwarka

Podobne podstrony:
STUDIUM PRZYPADKU IMPLEMENTACJA LISTY WSKAŹNIKOWEJ 115Zobacz też • Powszechna praktyki konstruktor)
STUDIUM PRZYPADKU IMPLEMENTACJA LISTY WSKAŹNIKOWEJ 147 5. Wróć do punktu 2 void wypisz_liste(el_list
ALG3 5.1 Listy jednokierunkowe 113 int wzor(int x,int(*fun)(int!) [ return fun(x); ) void main(} i
Image2 #include <stdio.h> int main () // kod znaku 0 = 4
socjo 10 118 Rozdział 4. Interakcja społeczna a życie codzienne Studium przypadku - podejmowanie ról
IMGy42 NATALIA -STUDIUM PRZYPADKU DYSPRAKSJI „Nie potrafię” — krzyczy Natalia — „jak się na to wchod
IMG?87 (2) 118 Studium ii. o 3, Mówienie ety przemawianie!119 strzegał ich — z niewątpliwym uszczerb
72 Studium przypadkuMaciej ŁawrynowiczSamorządowa platforma edukacyjna - e-learning w administracji
Studium przypadku 73 Tabela 1. Harmonogram projektu e-learningowego Etapy
74 Studium przypadku W proces przygotowania i wdrożenia projektu zaangażowane były 3 osoby: kierowni
Studium przypadku 75 Tabela 3. Kurs język angielski w administracji publicznej Charakterystyka Jęz
76 Studium przypadku Schemat 1. Procedura szkoleń e-learnigowych w Urzędzie Miasta Poznania. r ■
etyka ksero4 Studium przypadku np. Dyrektorka jrzedszkola, kucharka, 2 pomocnice tak cienko kroją sz
STUDIUM PRZYPADKU W INTERNECIEModerator: ks. dr Zenon Hanas SAC 6 grudnia, AULA IM. JANA PAWŁA II,&n

więcej podobnych podstron