#include <stdio.h>
#include <stdlib.h>
struct nodo{
char letra;
struct nodo *siguiente;
};
typedef struct nodo nuevoNodo;
typedef nuevoNodo *ptrnuevoNodo;
void menu ();
void imprimir_lista (ptrnuevoNodo lista);
int esta_vacia (ptrnuevoNodo lista);
void insertar_letra (ptrnuevoNodo * lista, char valor);
int eliminar_letra (ptrnuevoNodo * lista, char valor);
int main (){
int opt = 1;
char valor;
ptrnuevoNodo lista = NULL;
menu ();
while ( opt != 4 ){
switch ( opt ){
case 1:
imprimir_lista (lista);
break;
case 2:
printf ("Introduce un caracter\n");
insertar_letra (&lista, valor);
imprimir_lista (lista);
break;
case 3:
printf ("Introduce un caracter\n");
eliminar_letra (&lista, valor);
imprimir_lista (lista);
break;
case 4:
break;
default:
printf ("Opcion incorrecta\n");
menu ();
}
}
}
void imprimir_lista (ptrnuevoNodo lista){
if ( esta_vacia (lista) ){
printf ("La lista esta vacia \n");
}
else{
while ( lista != NULL ){
printf ("%c -> ", lista
-> letra
);
lista = lista->siguiente;
}
}
}
int esta_vacia (ptrnuevoNodo lista){
return lista == NULL;
}
void insertar_letra (ptrnuevoNodo * lista, char valor){
ptrnuevoNodo ptrNuevo = NULL;
ptrNuevo
= malloc ( sizeof ( struct nodo
) );
if ( ptrNuevo == NULL ){
printf ("No hay memoria disponible \n");
}
else {
ptrNuevo->letra = valor;
ptrNuevo->siguiente = NULL;
ptrnuevoNodo ptrAnterior = NULL;
ptrnuevoNodo ptrActual;
ptrActual = *lista;
while ( ptrActual->letra < valor && ptrActual != NULL ){
ptrAnterior = ptrActual;
ptrActual = ptrActual -> siguiente;
}
if ( ptrAnterior == NULL ){
ptrNuevo->siguiente = ptrActual;
*lista = ptrNuevo;
}
else{
ptrAnterior->siguiente = ptrNuevo;
ptrNuevo->siguiente = ptrActual;
}
}
}
int eliminar_letra (ptrnuevoNodo * lista, char valor){
ptrnuevoNodo ptrActual = *lista;
ptrnuevoNodo temp = NULL;
if ( ptrActual->letra == valor ){
temp = *lista;
*lista = (*lista) -> siguiente;
return 1;
}
else{
ptrnuevoNodo ptrAnterior = ptrActual;
ptrActual = (*lista)->siguiente;
while ( ptrActual->letra < valor && ptrActual != NULL ){
ptrAnterior = ptrActual;
ptrActual = ptrActual -> siguiente;
}
ptrAnterior = ptrActual;
ptrActual = ptrActual->siguiente;
ptrActual = ptrActual->siguiente;
ptrAnterior->siguiente= ptrActual;
}
}
void menu (){
printf ( "%s%s%s%s", "Introduce 1 para ver la lista \n",
"Introduce 2 para añadir un elmento \n",
"Introduce 3 para eliminar un elemento \n",
"Introduce 4 para salir del programa \n");
}