¿Cómo Crear una Lista Ligada Simple en C? - How to Create a Simple Linked List in C?

                                                   

#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;

   

}

Publicar un comentario

0 Comentarios