Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. www.neurohope.ro |
Nu inteleg listele
Last Updated: Apr 27 2015 17:56, Started by
AdrianUrsaciuc
, Apr 27 2015 16:56
·
0
#1
Posted 27 April 2015 - 16:56
Cum spune si titlul nu prea inteleg listele, bine in mare le-am inteles cum ar fi citirea, afisarea, dar nu inteleg cum se face eliminarea ultimului nod.
Ce inseamna lista[lista[p].urm].urm ? #include <iostream> using namespace std; struct nod { int val; int urm; }; int main() { int nr_max=100; int liber[nr_max]; int ultim=NULL; int prim=NULL; int nr_el=0; int p,n; nod lista[nr_max]; cout<<"n= "; cin>>n; cout<<endl; //initializarea listei for(int i=1;i<=nr_max;i++) { liber[i]=1; } for(int i=1;i<n+1;i++) { //citirea primului element din lista if(nr_el==0) { liber[i]=0; prim=ultim=i; cout<<"val= "; cin>>lista[i].val; lista[i].urm=NULL; nr_el++; ultim=i; } //citirea listei else { liber[i]=0; lista[p].urm=i; cout<<"val= "; cin>>lista[i].val; lista[i].urm=NULL; nr_el++; ultim=i; } p=i; } //Eliminarea ultimului nod for(p=prim;lista[lista[p].urm].urm!=NULL;p=lista[p].urm); liber[lista[p].urm]=1; nr_el--; lista[p].urm=NULL; ultim=lista[prim].urm; cout<<endl; //parcurgerea si afisarea listei p=prim; while(p!=NULL) { cout<<lista[p].val<<endl; p=lista[p].urm; } return 0; } |
#2
Posted 27 April 2015 - 17:09
Eliminarea ultimului nod e la fel ca eliminarea oricărui alt nod, doar că execuți mai puține operații: doar pui penultimul nod să pointeze către NULL.
Bineînțeles, și eliberezi memoria, dacă ai alocat-o pe heap. Ce ai tu acolo nu e o listă înlănțuită. Tipul de date al următorului nod trebuie să fie un pointer către nod. |
#3
Posted 27 April 2015 - 17:18
OriginalCopy, on 27 aprilie 2015 - 17:09, said:
Eliminarea ultimului nod e la fel ca eliminarea oricărui alt nod, doar că execuți mai puține operații: doar pui penultimul nod să pointeze către NULL. Bineînțeles, și eliberezi memoria, dacă ai alocat-o pe heap. Ce ai tu acolo nu e o listă înlănțuită. Tipul de date al următorului nod trebuie să fie un pointer către nod. |
#4
Posted 27 April 2015 - 17:28
Ce anume nu intelegi? Citeste codul.
nod - o pereche de doua numere intregi lista - o lista de elemente in care fiecare element are o "adresa" - un numar intreg intre 0 si nr_max lista[x] - elementul cu "adresa" x din lista Tot ce urmeaza tine strict de interpretarea ta, ca programator, a datelor. Din moment ce adresele din lista si perechea din nod sunt numere intregi inseamna ca intr-un nod poti memora, pe langa o valoare, si "adresa" unui alt nod. nod.val - valoarea "utila" stocata de nod nod.urm - adresa unui alt nod De aici ar trebui sa fie simplu. lista[lista[p].urm].urm se "citeste" asa: Adresa (nu nodul!) "urmatoare" nodului de la adresa urmatoare a nodului de la adresa p din lista. |
#5
Posted 27 April 2015 - 17:40
Si
int este_vida=(prim==NULL);ce inseamna?cu ce o pot inlocui? |
#6
Posted 27 April 2015 - 17:56
int este_vida; if(prim == NULL) { este_vida = 1; } else { este_vida = 0; } Edited by neagu_laurentiu, 27 April 2015 - 17:57. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users