#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Nodo{
int numero;
struct Nodo *siguiente;
}miNod;
void insertarLista(miNod **lista, int numero){
miNod *nuevoNodo, *aux; //Creamos un nueva nodo,
nuevoNodo = (miNod *) malloc(sizeof(miNod ));
nuevoNodo -> numero = numero; //Se crea un nuevoNodo y le asignamos cada valor ingresado por el usuario a ese nodo
nuevoNodo -> siguiente = NULL;
//InsercionLista
if (*lista==NULL){
*lista = nuevoNodo;
} else{
aux = *lista;
while (aux->siguiente!=NULL){ /
aux=aux->siguiente; //Recorremos la lista
}
aux->siguiente=nuevoNodo;
}
}
void liberarMemoria(miNod **lista){ //Procedimiento para Liberar Memoria de una Lista
free(*lista);
}
void mostrarLista(miNod **lista){ //Procedimiento para mostrar los elementos de una lista enlazada
miNod *aux = *lista;
printf("\n Su lista es: ");
while(aux != NULL){ //Repetir esto hasta que se llegue a NULL, es decir, hasta que ya no exista mas elementos a recorrer.
printf(" %d ",aux->numero); //Imprimimos el valor del nodo
aux = aux->siguiente;
}
printf(" \n ");
return;
}
void eliminarLista(miNod **lista, int auxNumero){
miNod *aux;
miNod *ant = *lista;
//Si el nodo a eliminar es el primero
if((*lista) -> numero == auxNumero){
*lista = (*lista) -> siguiente; //Ahora el primer elemento de la lista sera el siguiente al que eliminamos
free(ant); //liberar el anterior nodo
}
else{ //para eliminar un nodo que no es el nodo inicio
//se recorre la lista para buscar el numero a eliminar
//si se encuentra el número se procede a eliminarlo
//si se llega al fin de la lista sin hallar el número se porta al usuario
while((ant->siguiente->numero!= auxNumero)||(ant->siguiente!=NULL)){ //Recorremos la lista hasta que encontremos el nAEliminar
if( ant->siguiente->numero == auxNumero) //Encontre el dato a eliminar
{
//Proceso eliminacion entre nodos. ant apunta al anterior del datoa elimnar
aux = ant->siguiente; //Aux apunta al nodo que se eliminara
ant->siguiente=aux->siguiente; //Enlazo el nodo anteriro al de elmimnar y su posterior, ya queda librel el nodo a eliminar apuntado por aux
free(aux); //Eliminar/Borrar el nodo
break;
}
else
{
ant=ant->siguiente; //Si todavia no encontramos el dato a liminar seguiimos recorriendo la lista
}
}
}
}
int main(int argc, const char * argv[]) {
int numero;
int n,i;
miNod *lista = NULL; //Lista Vacia
printf(" ¿Cuántos Numeros Desea Ingresar?: ");
scanf("%d",&n); //Total de Numeros
//MENU
int opcion;
do{
printf( "\n 1. Ingresar Elementos a la Lista");
printf( "\n 2. Mostar Elementos a la Lista");
printf( "\n 3. Eliminar Elementos a la Lista");
printf( "\n 4. Liberar Memoria");
printf( "\n Introduzca una Opción (1-4): ");
scanf("%d", &opcion);
switch (opcion)
{
case 1:
// printf(" Ingrese los Numeros: ");
for( i = 0; i < n ; i++){
printf(" Ingrese el Numero %d: ", i + 1);
scanf("%d",&numero); //Datos a Ingresar
insertarLista (&lista, numero);
// insertarOrdenado (&lista, numero);
}
break;
case 2:
mostrarLista(&lista);
break;
case 3:
printf(" \n Ingrese el Numero A Eliminar\n");
scanf("%d",&numero);
eliminarLista(&lista,numero);
break;
case 4:
printf(" El Programa ha terminado Satisfactoriamente \n");
liberarMemoria(&lista);
break;
}
}while( opcion != 5);
return 0;
}
0 Comentarios