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 ("Xlu\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 pomię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ć lani, który odpowiednio l>ę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 X 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