Przesuwanie wskaznika oraz pierwszy element listy / C

0

Zakomentuje w kodzie ponizej to czego w nim nie rozumiem, siedzialem troche i czytalem ale paru punktow nie ogarniam, prosilbym o wyjasnienie:

 #include <stdio.h>
 #include <stdlib.h>
 
 typedef struct element {
   struct element *next;
   unsigned long val;
 } el_listy;
 
 el_listy *first; /* To jest wskaznik first na strukture el_listy tak ? */
 
 void dodaj_do_listy (el_listy *lista, unsigned long liczba)
 {
   el_listy *wsk, *nowy;
   wsk = lista;
   while (wsk->next != NULL)
     { 
     wsk = wsk->next; /* Nie rozumiem jak dziala przesuwanie wskaznika, z tego co mysle to "wsk" to jest to el_listy *first tak ? a wiec jak to dziala el_listy *first = *wsk.next ? prosilbym o wyjasnienie jak dziala tutaj to przesuwanie. */
     }
   nowy =(el_listy*) malloc (sizeof(el_listy));
   nowy->val = liczba;
   nowy->next = NULL;
   wsk->next = nowy;
 }
 
 void wypisz_liste(el_listy *lista)
 {
   el_listy *wsk=lista;
   while( wsk != NULL )
     {
     printf ("%lu\n", wsk->val);
     wsk = wsk->next;
     }
 }
 
 int jest_pierwsza(el_listy *lista, int liczba)
 {
   el_listy *wsk;
   wsk = lista;
   while (wsk != NULL) {
     if ((liczba%wsk->val)==0) return 0;
        wsk = wsk->next;
     }
     return 1;
 }
 
 int main ()
 {
   unsigned long i = 3;
   const unsigned long END = 1000;
   first =(el_listy*) malloc (sizeof(el_listy));
   first->val = 2; /* i tutaj te dwie linijki, ta i ta pod spodem z nextem... ten first->val i first-> next to bedzie to "wsk" uzywane w funkcjach tak ? w takim razie ktora ma wartosc */
   first->next = NULL;
   for (;i!=END;++i) {
     if (jest_pierwsza(first, i))
       dodaj_do_listy (first, i);
       }
   wypisz_liste(first);
   return 0;
 }
0

Przestudiuj strukturę tzw listy podczepianej i wszystko stanie sie dla Ciebie jasne.

0

/* To jest wskaznik first na strukture el_listy tak ? */
Wskaźnik na jakiś obiekt tej struktury.

/* Nie rozumiem jak dziala przesuwanie wskaznika, z tego co mysle to "wsk" to jest to el_listy *first tak ? a wiec jak to dziala el_listy *first = *wsk.next ? prosilbym o wyjasnienie jak dziala tutaj to przesuwanie. */
Masz listę, np taką [1] -> [2] -> [3] -> [4] -> [5] -> [6] -> null
Załóżmy, że zaczynasz od [1], sprawdzasz, czy wskaźnik [1] jest różny od null, a jest bo wskazuje na [2], wtedy przesuwasz się na [2] i sprawdzasz czy jego wskaźnik jest != null itd.
Dochodzisz do [6] a jego wskaźnik jest ustawiony na null więc dalej się nie przesuwasz.

/* i tutaj te dwie linijki, ta i ta pod spodem z nextem... ten first->val i first-> next to bedzie to "wsk" uzywane w funkcjach tak ? w takim razie ktora ma wartosc */
Wartość przechowujesz w val, jak się łatwo domyślić od value.

0

na ktory obiekt struktury jest to wskaznik, na "val" ?

co do przesuwania wiem na jakiej zasadzie to dziala ale nie wiem jak...
"wsk" to dla mnie el_listy *first te dwa to to samo tak ?a wiec: wst = wsk.next == el_listy *first = el_listy *first.next ?? I jak przesuwa jak w next jest null

aha i moze *next i *first to juz jakies funkcje sa ? czy dowolnie mozna by je nazwac ?

0

Wyobraź sobie, że masz strukturę 'człowiek' i ma ona coś takiego jak 'reka' i 'noga'. Wskazujesz na konkretnego człowieka który ma te elementy a nie na jego rękę albo nogę.

0

wczesniej pisales ze na jakis obiekt tej struktury a teraz ze na cala strukture, moglbys jasniej ? I tez co z tym przesuwaniem dokladniej, jak dziala

0

Jaśniej napisał Ci @spartanPAGE

1 użytkowników online, w tym zalogowanych: 0, gości: 1