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

Va Rooooooooooog in c++
Se consideră o listă dublu înlănţuită. Să se un program care primeşte ca parametru adresa primului nod al listei şi şterge primul şi ultimul nod din listă.

Răspunsuri la întrebare

Răspuns de andrei750238
2

FUNCTIE CERUTA :

nod * stergere(nod *n){

   //Sterge primul nod

   n=n->u;

   n->a=NULL;

   //Memoreaza noul cap (pentru a il return la final) - OPTIONAL

   nod *cap_nou=n;

   //Cauta ultimul nod al listei si sterge-l

   while(n->u!=NULL) n=n->u;

   n=n->a;

   n->u=NULL;

   //Returneaza noul cap - OPTIONAL

   return cap_nou;

}

EXEMPLU IN PROGRAM  (demonstratia ca functia functioneaza corect):

#include <iostream>

using namespace std;

struct nod{

   int data;

   nod *u, *a;

};

nod * stergere(nod *n){

   //Sterge primul nod

   n=n->u;

   n->a=NULL;

   //Memoreaza noul cap (pentru a il return la final) - OPTIONAL

   nod *cap_nou=n;

   //Cauta ultimul nod al listei si sterge-l

   while(n->u!=NULL) n=n->u;

   n=n->a;

   n->u=NULL;

   //Returneaza noul cap - OPTIONAL

   return cap_nou;

}

int main(){

   //Construire lista

   nod a,b,c,d,e;

   a.data=0;

   b.data=1;

   c.data=2;

   d.data=3;

   e.data=4;

   a.a=NULL;

   b.a=&a;

   c.a=&b;

   d.a=&c;

   e.a=&d;

   a.u=&b;

   b.u=&c;

   c.u=&d;

   d.u=&e;

   e.u=NULL;

   //Afisare proprietati inainte de operatie

   cout << "INAINTE DE STERGERE:\n";

   cout << "a - (" << &a << ") = " << a.a << " - " << a.u << endl;

   cout << "b - (" << &b << ") = " << b.a << " - " << b.u << endl;

   cout << "c - (" << &c << ") = " << c.a << " - " << c.u << endl;

   cout << "d - (" << &d << ") = " << d.a << " - " << d.u << endl;

   cout << "e - (" << &e << ") = " << e.a << " - " << e.u << endl;

   //Efectuarea operatiei

   cout << "\nPRIMUL ELEMENT DIN LISTA DUPA STERGERE:" << stergere(&a) << endl << endl;

   //Afisarea proprietati dupa oeprtie

   cout << "DUPA STERGERE:\n";

   cout << "a - (" << &a << ") = " << a.a << " - " << a.u << endl;

   cout << "b - (" << &b << ") = " << b.a << " - " << b.u << endl;

   cout << "c - (" << &c << ") = " << c.a << " - " << c.u << endl;

   cout << "d - (" << &d << ") = " << d.a << " - " << d.u << endl;

   cout << "e - (" << &e << ") = " << e.a << " - " << e.u << endl;

}

Nota :

Am proiectat functia astfel incat sa returneze adresa noului nod initial al listei. Chiar daca cerinta nu cere practic este esential sa stim adresa unui nod valid pentru prelurarea in continuare a listei.

Observi in imagine ca la final nodul anterior nodului b este null (nodul a a fost sters din structura) iar nodul urmator nodului d este null (nodul e a fost sters din structura). Deci functia functioneaza corect.

Anexe:
Alte întrebări interesante