Lista Circular - Clase en C++
author icon Escrito por Henry | Imprimir Correo electrónico
Valoración de los usuarios: / 2
PobreEl mejor 

 

 CÓDIGO FUENTE - Lista Circular y sus métodos (Clase en C++)


/* Esta clase contiene un nodo, y una clase en C++, que sirve para trabajar con una lista circular, contiene los métodos 'buscar', 'eliminar', 'imprimir', 'insertar_final', 'insertar_comienzo', su destructor y constructor */

struct ndcr
{
 int data;
 ndcr *dire;
};

typedef ndcr *pn;

class lstcir
{
private:
 pn one;
public:
 lstcir();
 ~lstcir();
 void insertar_comienzo(int h1);
 void insertar_final(int h1);
 void imprimir();
 void eliminar(int h1);
 pn buscar(int h1);
 pn buscar_anterior(int h1);
};

lstcir::lstcir()
{
 one=NULL;
}

lstcir::~lstcir()
{
 pn k1,k2;
 if(one!=NULL)
 {
  k1=(*one).dire;
  k2=one;
  delete k2;
  while(k1!=one)
  {
   k2=k1;
   k1=(*k1).dire;
   delete k2;
  }
  one=NULL;
 }
}

void lstcir::insertar_comienzo(int h1)
{
 pn k1,k2;
 k1=new ndcr;
 (*k1).data=h1;
 if(one==NULL)
 {
  one=k1;
  (*k1).dire=one;
 }
 else
 {
  k2=(*one).dire;
  while((*k2).dire!=one) k2=(*k2).dire;
  (*k2).dire=k1;
  (*k1).dire=one;
  one=k1;
 } 
}

void lstcir::insertar_final(int h1)
{
 pn k1,k2;
 k1=new ndcr;
 (*k1).data=h1;
 if(one==NULL)
  one=k1;
 else
 {
  k2=(*one).dire;
  while((*k2).dire!=one) k2=(*k2).dire;
  (*k2).dire=k1;
 }
 (*k1).dire=one;
}

void lstcir::imprimir()
{
 pn k1;
 cout<<endl;
 if(one==NULL)
  cout<<"Esta lista esta vacia"<<endl;
 else
 {
  k1=one;
  cout<<(*k1).data<<" -> ";
  k1=(*k1).dire;
  while(k1!=one)
  {
   cout<<(*k1).data<<" -> ";
   k1=(*k1).dire;
  }
 }
 cout<<endl;
}

void lstcir::eliminar(int h1)
{
 pn k1,k2;
 if(one!=NULL)
 {
  k1=one;
  if((*one).data==h1)
  {
   if(one==(*one).dire)
   {
    delete one;
    one=NULL;
   }
   else
   {
    one=(*one).dire;
    k2=one;
    while((*k2).dire!=k1) k2=(*k2).dire;
    (*k2).dire=one;
    delete k1;
   }
  }
  else
  {
   k2=one;
   while((*k1).data!=h1 && (*k1).dire!=one)
   {
    k2=k1;
    k1=(*k1).dire;
   }
   if((*k1).data==h1)
   {
    (*k2).dire=(*k1).dire;
    delete k1;
   }
  }
 }
}

pn lstcir::buscar(int h1)
{
 pn k;
 if(one!=NULL)
 {
  k=one;
  while((*k).dire!=one && (*k).data!=h1) k=(*k).dire;
  if((*k).data==h1)
   return k;
  else
   return NULL;
 }
 else
  return NULL;
}

pn lstcir::buscar_anterior(int h1)
{
 pn k,l;
 k=one;
 l=NULL;
 while((*k).data!=h1)
 {
  l=k;
  k=(*k).dire;
 }
 return l;
}

 COMENTARIOS
 

 

 

Última actualización el Jueves 07 de Septiembre de 2006 21:14