Sa se realizeaze o clasa ce implementeaza notiunea de lista simplu inlantuita.
1 #include <conio.h> #include <iostream> #define TipI int using namespace std; 5 class Lista; /** Clasa Nod al unei liste*/ class Nod { TipI info; 10 Nod *next; public: Nod(); Nod(TipI info,Nod* next=0); TipI getInfo(); 15 void setInfo(TipI info); Nod* getNext(); void setNext(Nod* next); int operator == (Nod&); friend class Lista; //clasa Lista va avea acces la datele private ale clasi Nod. 20 }; /*Constructor implicit*/ Nod::Nod(){ next=0; 25 } /*Constructor de initializare*/ Nod::Nod(TipI info, Nod* next){ this->info=info; 30 this->next=next; } TipI Nod::getInfo(){ return info; 35 } void Nod::setInfo(TipI info){ this->info=info; } 40 Nod* Nod::getNext(){ return next; } 45 void Nod::setNext(Nod* next){ this->next=next; } int Nod::operator == (Nod &n){ 50 return this->info==n.info; } 55 /** Clasa Lista simplu inlatuita*/ class Lista { protected: Nod *prim; //retine primul element din lista 60 Nod *ultim; //retine ultimul element din lista public: Lista(); ~Lista(); 65 int isEmpty(); // testeaza daca lista e vida void addElement(Nod n);//adauga un element la sfarsitul listei Nod* getFirst();//intoarce primul elemnt din lista Nod* getLast(); //intoarce ultimul element din lista Nod* getElementAt( int index); //intoarce pun pointer la elementul specificat 70 friend ostream& operator<<(ostream& out, Lista&); }; /** Implementarea clasei Lista*/ 75 Lista::Lista(){ prim=ultim=0; } /** Destructorul clasei Lista*/ Lista::~Lista(){ 80 Nod *p=prim; Nod *q; //se elibereaza spatiul de memorie rezervat elementelor listei/ while(p!=0){ q = p; 85 p = p->next; delete q; } prim=ultim = 0; } 90 int Lista::isEmpty(){ return prim==0; } /** Adauga un nod la sfarsitul listei*/ void Lista::addElement(Nod n){ 95 Nod *p; p=new Nod(n.info,0); if(isEmpty()){ prim=ultim=p; } else { 100 ultim->next=p; ultim = p; } } 105 Nod* Lista::getFirst(){ return prim; } Nod* Lista::getLast(){ 110 return ultim; } Nod* Lista::getElementAt( int index){ Nod* p; 115 int i; for(i=0,p=prim;i<index&&p!=0;i++,p=p->next); return p; 120 } ostream& operator<<(ostream& out, Lista& lista){ Nod * p=lista.getFirst(); 125 while(p){ cout<<p->getInfo()<<","; p=p->getNext(); } cout<<"\b "; 130 return out; } int main(int argc, char *argv[]) { Lista L; 135 L.addElement(Nod(1)); L.addElement(Nod(2)); cout<<"Continutul Listei:"<<L; getch(); return 0; 140 }