/* Dada una lista circular de caracteres con 2 punteros -defina las estructuras de datos que permitan representarla e -implemente las operaciones iniciar_lista, agregar_inicio, quitar_nodo (según un valor específico) y mostrar_lista. */ #include #include #include using namespace std; typedef struct tnodo *pnodo; typedef struct tnodo{ char dato; pnodo sig; }; typedef struct tlista{ pnodo inicio; pnodo fin; }; //Inicialización de la lista void iniciar_lista(tlista &lis); //Creación del nodo void crear(pnodo &nuevo); void agregar_inicio(tlista &lis, pnodo nuevo); pnodo quitar_especifico(tlista &lis, char valor); void mostrar_lista(tlista lis); void menu(int &op); main() { tlista lista; pnodo nuevo, eliminado; int op; char valor; iniciar_lista(lista); do{ system("cls"); menu(op); switch(op) { case 1: cout<<".....Agregar valor ......"<>valor; eliminado=quitar_especifico(lista, valor); if(eliminado!=NULL) { cout<<"Eliminado "<dato<> nuevo->dato; nuevo->sig=NULL; } else cout<<"Memoria llena"<sig=lis.inicio; } else { //for(i=lis;i->sig!=lis;i=i->sig); i=lis.fin nuevo->sig=lis.inicio; lis.inicio=nuevo; //lis.fin->sig=lis.inicio; } lis.fin->sig=lis.inicio; } //quita un nodo que coincide con un valor ingresado por el usuario pnodo quitar_especifico(tlista &lis, char borrado) { pnodo i, aux; if(lis.inicio==NULL) aux=NULL; else {if(lis.inicio->dato==borrado)//si es el primero { if(lis.inicio==lis.fin) //unico elemento { aux=lis.inicio; lis.inicio=NULL; lis.fin=NULL; aux->sig=NULL; } else //mas de un elemento { //for(i=lis;i->sig!=lis;i=i->sig); aux=lis.inicio; lis.inicio=aux->sig; lis.fin->sig=lis.inicio;//engancha el ultimo con el primero aux->sig=NULL; } } else//no es el primero { for(i=lis.inicio; i!=lis.fin && (i->sig)->dato != borrado; i=i->sig); if((i->sig)->dato==borrado) { //if(i->sig==lis.fin) lis.fin=i; aux=i->sig; i->sig=aux->sig; aux->sig=NULL; if(aux==lis.fin) lis.fin=i; } else aux=NULL; } } return aux; } //Mostrar los elementos de la lista void mostrar_lista(tlista lis) { pnodo i; for(i=lis.inicio; i!=lis.fin; i=i->sig) cout<dato<dato<>op; }