/* Dada una lista circular de caracteres -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; }; //Inicialización de la lista void iniciar_lista(pnodo &lis); //Creación del nodo void crear(pnodo &nuevo); void agregar_inicio(pnodo &lis, pnodo nuevo); pnodo quitar_especifico(pnodo &lis, char valor); void mostrar_lista(pnodo lis); void menu(int &op); main() { pnodo 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; } else { for(i=lis;i->sig!=lis;i=i->sig); nuevo->sig=lis; lis=nuevo; i->sig=lis; } } //quita un nodo que coincide con un valor ingresado por el usuario pnodo quitar_especifico(pnodo &lis, char borrado) { pnodo i, aux; if(lis==NULL) aux=NULL; else {if(lis->dato==borrado)//si es el primero { if(lis->sig==lis) //unico elemento { aux=lis; lis=NULL; aux->sig=NULL; } else //mas de un elemento { for(i=lis;i->sig!=lis;i=i->sig); aux=lis; lis=aux->sig; i->sig=lis;//engancha el ultimo con el primero aux->sig=NULL; } } else//no es el primero { for(i=lis; i->sig!=lis && (i->sig)->dato != borrado; i=i->sig); if((i->sig)->dato==borrado) { aux=i->sig; i->sig=aux->sig; aux->sig=NULL; } else aux=NULL; } } return aux; } //Mostrar los elementos de la lista void mostrar_lista(pnodo lis) { pnodo i; for(i=lis; i->sig!=lis; i=i->sig) cout<dato<dato<>op; }