Kurs programowania w C cz. 130

Nasza ocena:

5
Wyświetleń: 546
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C cz. 130 - strona 1

Fragment notatki:

STUDIUM PRZYPADKU — IMPLEMENTACJA LISTY WSKAŹNIKOWEJ 147 5. Wróć do punktu 2 void wypisz_liste(el_listy *lista) { el_listy *wsk=lista; /* 1 */ while( wsk != NULL ) /* 2 */ { printf ("%lu\n", wsk-val); /* 3 */ wsk = wsk-next; /* 4 */ } /* 5 */ } Zastanówmy się teraz, jak powinien wyglądać kod, który dodaje do listy następny element. Taka funkcja powinna: 1. znaleźć ostatni element (tj. element, którego pole next == NULL) 2. przydzielić odpowiedni obszar pamięci 3. skopiować w pole val w nowo przydzielonym obszarze znalezioną liczbę pierwszą 4. nadać polu next ostatniego elementu listy wartość NULL 5. w pole next ostatniego elementu listy wpisać adres nowo przydzielonego obszaru Napiszmy zatem odpowiednią funkcję: void dodaj_do_listy (el_listy *lista, unsigned long liczba) { el_listy *wsk, *nowy; wsk = lista; while (wsk-next != NULL) /* 1 */ { wsk = wsk-next; /* przesuwamy wsk aż znajdziemy ostatni element */ } nowy = malloc (sizeof(el_listy)); /* 2 */ nowy-val = liczba; /* 3 */ nowy-next = NULL; /* 4 */ wsk-next = nowy; /* 5 */ } I... to już właściwie koniec naszej funkcji (warto zwrócić uwagę, że funkcja w tej wersji zakłada, że na liście jest już przynajmniej jeden element). Wstaw ją do kodu przed funkcją main. Został nam jeszcze jeden problem: w pętli for musimy dodać kod, który odpowiednio będzie “badał” liczby oraz w przypadku stwierdzenia pierwszeństwa liczby, będzie dodawał ją do listy. Ten kod powinien wyglądać mniej więcej tak: int jest_pierwsza(el_listy *lista, int liczba) { el_listy *wsk; wsk = first; while (wsk != NULL) { if ((liczba % wsk-val)==0) return 0; /* jeśli reszta z dzielenia liczby przez którąkolwiek z poprzednio znalezionych liczb pierwszych jest równa zero, to znaczy, że liczba ta nie jest liczbą pierwszą */ wsk = wsk-next; } /* natomiast jeśli sprawdzimy wszystkie poprzednio znalezione liczby ... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz