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