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 }