Programare Orientata pe Obiecte


Clase si functii friend

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 }   

Tema

  1. Adaugati la clasa Lista prezentata anterior metode pentru cautarea unui element, stergerea unui element, golirea listei.

  2. Implementati clasa Stiva.

  3. Implementati clasa Coada.