Informatică, întrebare adresată de 1212123, 8 ani în urmă

Buna puteți să-mi explicați cum fucționeaza programul dat :

#include


using namespace std;


struct nod{


float data;


nod *next;


}L[100];


void elimin_dubluri(nod *x){


sterge nodul urmator.


nod *y=x->next;


while(y->next){


if(x->data == y->data){


x->next=y->next;


y=y->next;


}


else{


x=x->next;


y=y->next;


}


}


}


int main(){


int n,i;




cout<<"Introduceti numarul de elemente in lista: ";

cin >> n;


for(i=1;i<=n;i++){

cout<<"Introduceti elementul: ";

cin >> L[i].data;


L[i].next= &L[i+1];


}


L[n].next=NULL;





elimin_dubluri(&L[1]);




cout<<"Lista finala: ";

nod *x=&L[1];


while(x->next){


cout << x->data << " ";


x=x->next;


}


cout << x->data << " ";

return 0;

}

Răspunsuri la întrebare

Răspuns de CaptnBanana
1

Răspuns:

Explicație:

In primul rand, programul nu merge pt. ca lipseste libraria dupa directiva #include, respectiv "sterge nodul urmator." nu e sintaxa valida si presupun ca ar fi trebuit sa fie comentat. Dupa ce este reparat programul, face urm. lucru: citeste n elemente de la tastatura si le sterge pe cele egale cu predecesorul. Acel L[100] reprezinta o lista inlantuita alocata static (echivalentul in C++ ar fi un vector din STL, ie. vector<float> L). Cand intrebi cum functioneaza programul, presupun ca te referi in special la functia elimin_dubluri. In lista de parametri e transmis un pointer catre o variabila nod (in main, apelul se face cu adresa lui L[1] <=> &L[1], adica a primului element), iar in interiorul functiei este initializat un pointer de tip nod catre elementul care vine dupa x, notat y. Acel while ruleaza pana cand conditia y->next devine falsa, adica cand y->next = nullptr, sau pointer nul, adica care nu memoreaza o adresa de memorie anume si indica finalul listei. If-ul verifica daca valorile retinute in x si y, care sunt elemente consecutive in lista, sunt egale, caz in care schimba adresa memorata de next-ul lui x in next-ul lui y, care e echivalent cu stergerea lui y din lista. Altfel, x primeste adresa lui y, iar y adresa elementului urmator lui si continua ciclul.

Alte întrebări interesante