Ea a fost apelata in mai multe functii pentru a putea urmari momentele in care se dezaloca obiectele care sant instantieri ale clasei tnod.
23.12 Sa se defineasca tipul abstract slist pentru implementarea listei simplu inlantuite.
Listele simplu inlantuite au fost implementate in limbajul C in capitolul 11.
Pentru gestiunea listelor simplu inlantuite s-au folosit doua variabile prim si ultim care sant pointeri sper primul si respectiv ultimul nod al listei.
         Aceste valori se vor utiliza si in cazul de fata cu acelasi scop.Ele sunt date membru protejate ale tipului abstract slist
          Avantajul implementarii tipului abstract slist este acela ca , se pot defini simultan si simplu orice obiecte de tip lista. 
          Functiile membru ale tipului abstract slist sunt: 
constructor implicit ;
deconstructor ;
adaugarea unui nou nod inaintea primului nod al listei ;
stergerea primului nod al listei ;
stergerea ultimului nod al listei ;
cautarea in lista a unui nod ;
afisarea datelor aflate in nodurile listei.
Nodurile listei sunt obiecte de tip tnod, tip definit in exercitiul 23.11
FISIERUL BXXIII12H
#ifndef  __BXXIII11_H
#include   "BXXIII1.CPP"
#define  __ BXXIII1_H
class slist {
      tnod *prim ;
      tnod *ultim ;
public :
      slist ( ) ;     // constructor
              ~slist ( ) ;  //destructor
             tnod *adauga (tod*) ;  //adauga un nod dupa cel spre care 
                                                                  //pointeaza ultim
              tnod *insereaza (tnod *p); //insereaza un nod inaintea   
                                                                            //celui spre care pointeza prim
              void sprim ( ) ;  //sterge primul nod din lista
              void sultim ( ) ;  //sterge ultimul nod al listei
                        tnod *cauta (tnod *p) ;
       /* - cauta nodul din lista pentru care p -> cuvant pointeaza
              spre un sir identic cu cel care pointeaza cuvant din nod ;
-returneaza pointerul spre nodul respectiv sau zero daca nu  
  exista un astfel de nod  */
                 void afislist ( ) ; //afiseaza datele din nodurile listei
        } ;
        Functiile membru ale clasei slist se definesc in fisierul de extensie CPP, de mai jos 
FISIERUL BXXIII12
#idndef  __BXXIII12_H
#include   "BXXIII12.H"
#define  __BXIII12_H
#endif
inline slist : : slist ( ) //constructor
{
prim = ultim = 0 ;
}
slist : : ~slist ( ) //destructor ; distruge toate nodurile listei
{
tnod *p, *q ;
for (p = prim ; p ; p=q) {
       q=p->urm ;   //pointer spre nodul urmator
                delete   p ;   //operatorul delete supraincarcat
}
prim = ultim = 0 ;
}
tnod *slist::adauga(tnod*p) //adauga un nod dupa ultimul nod al listei
{
if (prim == 0)  //lista vida
       prim = p ;
else ultim -> urm = p ;
ultim = p ;
return p ;
}
tnod *slist ; : insereaza (tnod *p) 
//insereaza un nou nod inaintea celui spre  care pointeaza prin
{ 
   if ( prim = = 0 )  //lista vida
         ultim = p ;
   else p -> urm = prim ;
   prim  = p ;
   return   p  ;
}
void slist : : sprim ( )  //sterge primul nod din lista
{
  if (prim0 {
          tnod *p = prim -> urm ;
          delete prim ; //se aplica operatorul delete supraincarcat
                       prim = p ;
                        if (prim = = 0 ) ultim = 0 ; //lista a devenit vida
      } else
          printf ( "lista vida n" ) ;
}
void slist : : sultim ( ) //sterge ultimul nod al listei
{
  if (prim) {
        tnod 8p,*p1 ;  
         // p - pointeaza spre nodul curent
        p = prim ;   
        //p1 - poinbteaza spre nodul precendet
        p1 = 0 ;
        while ( p != ultim ) { //parcurge lista
            p1 = p ;
            p = p -> urm ;
       }
      // p - pointeaza spre ultimul nod
      //p1 - pointeaza spre nodul precedent
      if (p1 = = 0 ) { //lista are un singur nod si devine vida
              delete p ; //se aplica operatorul supraincarcat
        prim = ultim = 0 ;
      return ;
   }
       //nodul spre care pointeaza p1 devine ultimul nod al listei
       p1 -> urm = 0 ;
   ultim = p1 ;
       //se sterge nodul spre care pointeaza p
       delete p ; //se aplica operatorul supraincarcat
} else
   printf ( " lista vida n " ) ;
}
tnod *slist : : cauta (tnod *p )
/* - cauta nodul pentru care cuvant pointeaza spre un sir identic cu cel spre  
       care pointeaza p -> cuvant ;
    - returneaza pointerul spre nodul respectiv sau 0 daca nu exista un astfel 
      de nod.  */
{
  tnod  *q ;
  for (q=prim;q;q=q->urm)
       if (stricmp (p -> cuvant,q -> cuvant = = 0 )   
  return q ;
  return 0 ;
}
void slist : : afislist  ( )
/* - afiseaza pentru fiecare nod:
    -cuvant
    si
    -frecv.
*/
{
  int nrlin = 1 ;
for (tnod *p = prim ; p ; p = p -> urm ) {
       p -> afistnod ( ) ;
       nrlin ++;
       if (nrlin %23 = = 0) {
   printf("Actionati o tasta pentru a continua n" );
           getch ( ) ;
         }
   }
}
23.