Ce am facut la scoala pe la ora... : /************************** (c) Popescu Ionut 2009 **************************/ #include<iostream.h> struct Nod { int inf; Nod * leg1, * leg2; } * prim1, * ultim1; int i, n, x, tip, y; // Functia adauga un nod in fata primului void adaugare_inainte(int x, Nod *& prim) { Nod * p; p = new Nod; p -> inf = x; p -> leg1 = NULL; p -> leg2 = prim; prim = p; } // Functia adauga un nod dupa ultimul void adaugare_dupa(int x, Nod *& ultim) { Nod * p; p = new Nod; p -> inf = x; p -> leg1 = ultim; p -> leg2 = NULL; ultim = p; } // Functia afiseaza lista de la inceput void afisare_inceput(Nod * prim) { Nod * p; p = new Nod; p = prim; cout<<"Afisare de la inceput\n------------------------------------\n"; while(p) { cout<<p -> inf<<" ( "<<p -> leg2<<" )"<<"\n"; p = p -> leg2; } cout<<"------------------------------------\n"; } // Functia afiseaza lista de la sfarsit void afisare_sfarsit(Nod * ultim) { Nod * p; p = new Nod; p = ultim; cout<<"Afisare de la sfarsit\n------------------------------------\n"; while(p) { cout<<p -> inf<<" ( "<<p -> leg1<<" )"<<"\n"; p = p -> leg1; } cout<<"------------------------------------\n"; } // Functia introduce un nod de valoare x, dupa nodul cu valoarea y void inserare_dupa(int x, int y, Nod * prim) { Nod * p, * q; p = new Nod; q = new Nod; p -> inf = x; q = prim; while(q -> inf != y && q != NULL) { q = q -> leg2; } p -> leg1 = q; p -> leg2 = q -> leg2; } // Functia introduce un nod de valoare x, inainte de nodul cu valoarea y void inserare_inainte(int x, int y, Nod * prim) { Nod * p, * q; p = new Nod; q = new Nod; p -> inf = x; q = prim; while(q -> inf != y && q != NULL) { q = q -> leg2; } p -> leg1 = q -> leg1; p -> leg2 = q; } // Main-ul int main() { prim1 = new Nod; ultim1 = new Nod; cout<<"Noduri : "; cin>>n; cout<<"\nSelectati tipul de adaugare: \n1) Dupa ultimul element\n2) Inaintea primului element\n\nTip : "; cin>>tip; cout<<"\n------------------------------------\n"; cout<<"Nod 1 : "; cin>>x; prim1 -> inf = x; prim1 -> leg1 = NULL; prim1 -> leg2 = NULL; ultim1 = prim1; for(i = 2; i <= n; i++) { cout<<"Nod "<<i<<" : "; cin>>x; if(tip == 2) adaugare_inainte(x, prim1); else adaugare_dupa(x, ultim1); } cout<<"\n------------------------------------\n\n"; cout<<"Selectati tipul de afisare: \n1) De la inceput\n2) De la sfarsit\n\nTip : "; cin>>tip; if(tip == 2) afisare_sfarsit(ultim1); else afisare_inceput(prim1); // Introducem un nod dupa o valoare cout<<"\n------------------------------------\n"; cout<<"Introduce un nod dupa valoarea : "; cin>>y; cout<<"Valoare de introdus : "; cin>>x; inserare_dupa(x, y, prim1); afisare_inceput(prim1); // Introducem un nod inainte de o valoare cout<<"\n------------------------------------\n"; cout<<"Introduce un nod inainte valoarea : "; cin>>y; cout<<"Valoare de introdus : "; cin>>x; inserare_dupa(x, y, prim1); afisare_inceput(prim1); return(0); } Pastebin: http://pastebin.com/f5f6c720b Alta versiune ( nu mai stiu, cred ca e mai noua ) #include<iostream.h> struct Nod { int inf; Nod * legs, * legd; } * prim, * ultim; int i, n, x, y; void adaugare_inainte(int x) { Nod * p; p = new Nod; p -> inf = x; p -> legs = NULL; p -> legd = prim; prim -> legs = p; prim = p; } void adaugare_dupa(int x) { Nod * p; p = new Nod; p -> inf = x; p -> legd = NULL; p -> legs = ultim; ultim -> legd = p; ultim = p; } void inserare_dupa(int x, int y) { Nod * p, * q; p = new Nod; p -> inf = x; q = prim; while(q -> inf != y && q -> legd) { q = q -> legd; } p -> legd = q -> legd; q -> legd = p; p -> legs = q; } void inserare_inainte(int x, int y) { Nod * p, * q; p = new Nod; p -> inf = x; q = prim; while(q -> inf != y && q -> legd) { q = q -> legd; } p -> legd = q; p -> legs = q -> legs; q -> legs -> legd = p; q -> legs = p; } void stergere_nod(int x) { Nod * p; p = prim; int g = 1; while(p) { if(p -> inf == x) { p -> legs -> legd = p -> legd; p -> legd -> legs = p -> legs; delete(p); g = 0; break; } p = p -> legd; } if(g) cout<<"Nodul nu a fost gasit\n\n"; } void afisare_inceput() { Nod * p; p = prim; cout<<"Afisare de la inceput : \n"; cout<<"\n-------------------------------\n"; while(p) { cout<<p -> inf<<" ( "<<p -> legs<<" ) ( "<<p -> legd<<" ) \n"; p = p -> legd; } cout<<"\n-------------------------------\n"; } void afisare_sfarsit() { Nod * p; p = ultim; cout<<"Afisare de la sfarsit : \n"; cout<<"\n-------------------------------\n"; while(p) { cout<<p -> inf<<" ( "<<p -> legs<<" ) ( "<<p -> legd<<" ) \n"; p = p -> legs; } cout<<"\n-------------------------------\n"; } void meniu() { int optiune; cout<<"Alege o optiune : \n\n"; cout<<"1) Adaugare nod la inceput\n"; cout<<"2) Adaugare nod la sfarsit\n"; cout<<"3) Inserare nod dupa o valoare\n"; cout<<"4) Inserare nod inainte de o valoare\n"; cout<<"5) Stergere nod\n"; cout<<"6) Afisare de la inceput\n"; cout<<"7) Afisare de la sfarsit\n"; cout<<"8) Iesire\n"; cout<<"Optiunea selectata : "; cin>>optiune; cout<<"\n-------------------------------\n"; switch(optiune) { case 1: cout<<"Valoare de introdus ( inainte ) : "; cin>>x; adaugare_inainte(x); cout<<"\n-------------------------------\n"; break; case 2: cout<<"Valoare de introdus ( dupa ) : "; cin>>x; adaugare_dupa(x); cout<<"\n-------------------------------\n"; break; case 3: cout<<"Valoare de inserat ( dupa ) : "; cin>>x; cout<<"Valoarea dupa care sa se introduca : "; cin>>y; inserare_dupa(x, y); cout<<"\n-------------------------------\n"; break; case 4: cout<<"Valoare de inserat ( inainte ) : "; cin>>x; cout<<"Valoarea inainte de care sa se introduca : "; cin>>y; inserare_inainte(x, y); cout<<"\n-------------------------------\n"; break; case 5: cout<<"Stergere nod de valoare : "; cin>>x; stergere_nod(x); cout<<"\n-------------------------------\n"; break; case 6: afisare_inceput(); break; case 7: afisare_sfarsit(); break; case 8: exit(0); break; default: cout<<"Optiunea selectata nu exista\n\n"; cout<<"\n-------------------------------\n"; } meniu(); } int main() { prim = new Nod; cout<<"Valoarea primului nod :"; cin>>x; // Crearea primului nod care e si ultimul prim -> inf = x; prim -> legs = NULL; prim -> legd = NULL; ultim = prim; meniu(); return(0); } Pastebin: http://pastebin.com/d14e11198 Nu am stat sa comentez fiecare linie de cod.