Hoy veremos una lista circular, que es una lista donde cada elemento de la lista tendra un nodo siguiente y un nodo anterior.
En el codigo que veremos a continuacion tenemos un menu un poco rudimientario donde se muestran los metodos:
- Crear Lista / Agregar un Nodo a la lista.
- Mostrar Lista.
- Eliminar un Nodo
- Eliminar toda la lista
Aqui les dejo el codigo:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
typedef char tipo;
class nodo_c {
tipo dato;
nodo_c *enlace;
public:
nodo_c() {dato=NULL; enlace=NULL;}
nodo_c(tipo e){ dato=e; enlace=this; /*se apunta a sí mismo */ }
tipo m_dato(){ return dato; }
nodo_c* m_enlace(){ return enlace; }
void p_enlace(nodo_c * e){ enlace=e; }
};
class lista_c{
nodo_c* lc;
public:
lista_c(){ lc=NULL; }
void insertar(tipo d){ nodo_c* nuevo; nuevo=new nodo_c(d);
if(lc!=NULL)
{ nuevo->p_enlace(lc->m_enlace());
lc->p_enlace(nuevo);
}
lc=nuevo;
}
void eliminar(tipo d){ nodo_c *aux; bool encon=false; aux=lc;
while( aux->m_enlace()!=lc && !encon )
{ if(aux->m_enlace()->m_dato() == d )
encon=true;
else
aux= aux->m_enlace(); }//fin while
if(encon)
{ nodo_c*aux2; aux2=aux->m_enlace(); // nodo a elminar
if(lc==lc->m_enlace()) // si tiene un solo nodo
lc=NULL;
else
{ if(aux2==lc) lc=aux;
aux->p_enlace(aux2->m_enlace()); }
delete aux2;}//fin if
}//fin eliminar
int verificar()
{ nodo_c* aux, *auxx;
if(lc==NULL)
{
return 0;
}
else
{
return 1;
}
}//fin mostrar
void mostrar()
{ nodo_c* aux, *auxx;
if(lc==NULL)
cout<<" La lista esta vacia\n";
else
{ auxx=lc->m_enlace(); aux=lc->m_enlace();
cout<<" Lista: { " /*<<lc->m_dato()*/;
do
{ cout<<aux->m_dato()/*<<" ,"*/;
aux=aux->m_enlace();
}while(aux!=auxx); //while
cout<<" \b"<<" }";
}//fin else
}//fin mostrar
void eliminar_todo() { tipo e; nodo_c *aux; aux=lc;
while(aux!=NULL)
{ e=aux->m_dato();
eliminar(e);
aux->m_enlace(); }
if(aux==NULL) cout<<" Lista vacia \n"; lc=NULL;
}
};
int main()
{
lista_c letra;
tipo l=NULL;
int opc;
do{ system("cls");
cout<<"MENU"<<endl;
if(letra.verificar()==0)
{
cout<<"1. Crear lista"<<endl;
}
else
{
cout<<"1. Agregar Nodo a la lista"<<endl;
}
cout<<"2. Mostrar la lista"<<endl;
cout<<"3. Eliminar un dato"<<endl;
cout<<"4. Eliminar la lista completa y Salir"<<endl;
cin>>opc;
switch(opc)
{
case 1: cout<<"Ingrese una letra: "<<endl;
cin>>l;
letra.insertar(l);
break;
case 2: letra.mostrar();
system("pause");
break;
case 3: cout<<"Ingrese elemento a eliminar: "<<endl;
cin>>l;
letra.eliminar(l);
break;
case 4: letra.eliminar_todo();
letra.mostrar();
break;
default: cout<<"Opcion invalida"<<endl; };
}while(opc < 5);
getch();
}
En c puro xfa
ResponderEliminar