Listas Enlazadas Circulares C++

Una lista circular es una lista lineal en la que el último nodo a punta al primero.
Las listas circulares evitan excepciones en la operaciones que se realicen sobre ellas. No existen casos especiales, cada nodo siempre tiene uno anterior y uno siguiente.

En algunas listas circulares se añade un nodo especial de cabecera, de ese modo se evita la única excepción posible, la de que la lista esté vacía.
El nodo típico es el mismo que para construir listas enlazadas simples:

FUNCION INSERTAR
inserta_fc(nodo *p)
{
nodo *q,*r;
char op;
   do
   {    
       clrscr();   
       q=new(nodo);
         cout<<"ingrese dato";
       cin>>q->inf;
      if(p!=NULL)
      {
        r=p;
        while(r->sig!=p)
        {
           r=r->sig;
        }
        r->sig=q;
        q->sig=p;
     }
     else
     {
       p=q;
       q->sig=p;
     }
    cout<<"mas datos()? ";
    cin>>op;
 }while(op=='s' || op=='S');
return(p);
}

FUNCION ELIMINAR
elimina_fc(nodo *p)
{
nodo *r, *t;
     clrscr();
     if(p!=NULL)
     {
        r=p;
        while(r->sig!=p)
        {
           t=r;
           r=r->sig;
        }
        if(p==r)
        {
           p=NULL;
        }
        else
        {
           t->sig=p;
        }
        delete(r);
        cout<<"el eltimo nodo fue eliminado";
        getch();
    }
    else
    {
       cout<<"la lista esta vacia";
       getch();
    }
return(p);
}

0 comentarios:

Publicar un comentario en la entrada