No. 32 de 56 de articulos. Practicas C

Articulos encontrados...

Prácticas y Ejercicios con Solución

Ejercicios, Prácticas, Cursos Gratuitos

Ejercicios : Listas de enlace simple con un solo puntero

Ejercicios con solución y prácticas resueltas de programación en c,nuevos ejercicios de programación en lenguaje C. El enunciado de las prácticas y ejercicios que se plantea es el siguiente: un nuevo ejercicio propuesto por una de nuestros seguidores del blog www.aprendoencasa.com que nos propone unos ejercicios o prácticas en la que se plantea realizar una lista de enlace simple con punteros, la cual permita la inserción, eliminación y listado de los elementos de la lista, no es la única forma de realizar el ejercicio, ni quizás sea la mas adecuada según los planteamientos de estructuras de datos, pero es fácilmente adaptable y comprensible para su modificación.

Vuelvo a comentar que no es la única solución posible y que la forma de mejorar siempre estas prácticas es que aportéis vuestro granito de arena utilizando para ello los comentarios. Un saludo y gracias por vuestra visita.

Para realizar las practicas o consultar los ejercicios de programación resueltos has de pulsar sobre el enlace a continuación denominado “LEER EL ARTICULO COMPLETO”. Recuerda también darnos ánimos haciendo un clic en el botón google+1 de la columna izquierda o el que esta situado en la parte superior del articulo, así como recomendar la visita a nuestra página a tus amigos.

Recordaros que los cursos online gratuitos en modalidad a distancia o teleformación, no pretenden ser un temario cerrado y que esperamos vuestras aportaciones. Muchísimas gracias por visitarnos.

Ejercicios y practicas de programación en c resueltos o con solución

El ejercicio planteado es el siguiente:

Prácticas: Lista de Enlace simple con punteros

Ejercicios y Practicas resueltas en lenguaje de programación en lenguaje C, Cursos Online Gratuitos

se plantea realizar una lista de enlace simple con punteros, la cual permita la inserción, eliminación y listado de los elementos de la lista, no es la única forma de realizar el ejercicio, ni quizás sea la mas adecuada según los planteamientos de estructuras de datos, pero es fácilmente adaptable y comprensible para su modificación.  La solución de los ejercicios que se plantean es la siguiente:

/*

Según la petición de un usuario del blog www.aprendoencasa.comvamos a realizar un ejercicio o práctica con solución la cual es de un
nivel más avanzado al habitual, la forma de solucionar la misma puede ser
muy discutible según con quien se hable y si se aplica a conciencia las
estructuras de datos. En esta ocasión el ejercicio con solución o práctica
resuelta es una lista de enlace simple, la cual permite insertar elementos
al final de la misma, realizar un listado de la lista, y borrar elementos de
la lista, como novedad dejo a los usuarios que según sus comentarios aporten
inicialmente soluciones a la hora de seleccionar la opción denominada Salir
la cual ha de realizar un borrado completo de la lista y terminar la ejecución
del programa, gracias de nuevo por sus visitas al blog www.aprendoencasa.es */ // Librerias utilizadas por el programa

#include <stdio.h>

#include <stdlib.h>

// Estructura para almacenar nodos de la lista

// será una lista de nombres

// por lo tanto cada elemento de la lista estará

// compuesto por una cadena que contendrá el nombre

// a almacenar y un puntero que servirá para apuntar

// al siguiente nodo de la lista, a este tipo de lista

// se les denomina de enlace simple.

typedef struct NodoLista {

  char Nombre[50];

  struct NodoLista *Siguiente;

} Nodo;

// Predefinición de funciones

int InsertarElemento(Nodo **);

void ListarElementos(Nodo *);

int BorrarElementoListaFinal(Nodo **);

int BorrarElementoListaPrincipio(Nodo **);

// Función principal

int main(int argc, char *argv[])

{

    // Crear el puntero Raíz de la lista

    // y se inicializa a nulo como valor

    // inicial

    Nodo *Inicio = NULL;

    // Crear una variable para solicitar las

    // opciones del menú

    int opcion=0;

    int opcion2=0;

    // Visualizar el menu de opciones

    do {

        printf("\n1.- Insertar elemento en la lista.");

        printf("\n2.- Listar elementos de la lista.");

        printf("\n3.- Borrar elemento de la lista.");

        printf("\n0.- Salir del programa.");

        printf("\n=====================================");

        printf("\nOpcion ...: ");

        scanf(" %d",&opcion);

        switch(opcion) {

          case 1:

               // Insertar elemento de la lista

               // El puntero de inicio se ha de pasar por referencia

               // ya que es puede verse afectado si se inserta el primer

               // elemento de la lista

               InsertarElemento(&Inicio);

               break;

          case 2:

               // Listar elementos de la lista

               ListarElementos(Inicio);

               break;

          case 3:

               printf("\n(1) Borrar al final.");

               printf("\n(2) Borrar al principio.");

               printf("\n.... ");

               scanf(" %d",&opcion2);

               switch(opcion2) {

                 case 1:

                      BorrarElementoListaFinal(&Inicio);

                      break;

                 case 2:

                      BorrarElementoListaPrincipio(&Inicio);

                      break;

               }

               break;

        }

    } while(opcion!=0);

  system("PAUSE" );	

  return 0;

}

// Función para insertar un elemento en la lista

// al final de la misma, como se puede observar

// el puntero de inicio que se recibe se ha pasado

// por referencia y por tanto se ha de especificar

// con un doble asterisco

int InsertarElemento(Nodo **Inicio)

{

     Nodo *Elemento = NULL;

     Nodo *Recorrer = NULL;

     Nodo *Ultimo = NULL;

     // Recorremos la lista hasta llegar al final

     // de la misma, en el puntero ultimo se quedara

     // almacenado la dirección de memoria del ultimo

     // elemento de la lista, si no existe ningún elemento

     // en la lista se queda con valor nulo asignado

     // En primer lugar se asigna el contenido del puntero

     // de inicio al puntero recorrer

     Recorrer = *Inicio;

     while(Recorrer!=NULL) {

       Ultimo = Recorrer;

       Recorrer=Recorrer->Siguiente;

     }

     // Creamos el nuevo nodo o elemento que se quiere

     // insertar

     Elemento = (Nodo *)malloc(sizeof(Nodo));

     // si ha existido un problema y no se crea el elemento

     // devolver un error, este tipo de interrupción del código

     // es preferible realizarlo utilizando condicionales y 

     // insertando un return para forzar la finalización de 

     // la función

     if(Elemento == NULL ) return -1;

     // Si se llega a este punto el elemento ha sido creado y

     // solicitamos el nombre que se ha de almacenar en el

     // mismo

     printf("\nTeclear Nombre : ");

     scanf(" %s",Elemento->Nombre);

     // asignamos el valor nulo al puntero siguiente de la lista

     // ya que este elemento será el ultimo de la misma y por

     // tanto no hay mas elementos posteriores

     Elemento->Siguiente = NULL;

     // Modificamos el puntero siguiente del ultimo elemento de la

     // lista para que apunte al elemento nuevo creado preguntando

     // primero si el valor de ultimo es null, ya que si es así

     // significa que el elemento nuevo creado es el primero y por

     // tanto hay que modificar el puntero de inicio

     if (Ultimo == NULL ) {

        // Es el primero de la lista

        *Inicio = Elemento;

     } else {

       // Es el ultimo de la lista

       Ultimo->Siguiente = Elemento;

     }

     // Salir de la función sin errores

     return 0;

}

// Función para listar elementos de la lista

// Se recibe como valor el contenido del puntero

// que indica el primer elemento de la lista

void ListarElementos(Nodo *Inicio)

{

     // Se crea una variable para recorrer la lista

     // asignándole como primer valor el elemento al

     // cual apunta el puntero de inicio

     Nodo *Recorrer = Inicio;

     // Se visualiza un mensaje

     printf("\nListado de elementos de la lista");

     printf("\n===================================");

     // Si hay elementos en la lista se recorre

     // intercambiando el valor del puntero siguiente

     // asignándolo al puntero recorrer que indica que

     // existe o no un elemento según su valor

     while(Recorrer!=NULL)

     {

        // Se visualiza el elemento

        printf("\n%s",Recorrer->Nombre);

        // Se cambia al elemento siguiente

        Recorrer=Recorrer->Siguiente; 

     }

     printf("\n===================================\n");

}

// Función Borrar elemento de la lista al principio

int BorrarElementoListaPrincipio(Nodo **Inicio)

{

    // Variable para almacenar el elemento a borrar

    Nodo *Borrar=NULL;

    // Se comprueba si el puntero de inicio apunta a

    // algún elemento si es así es que existen elementos

    // y se puede borrar el primero en caso contrario

    // no existe ningún elemento y no se puede borrar nada

    if (*Inicio==NULL) {

       printf("\nNo hay elementos que borrar\n");

       return -1;

    } else {

      Borrar = *Inicio;

      *Inicio = (*Inicio)->Siguiente;

      free (Borrar);

    }

    return 0;

}

// Función Borrar elemento de la lista al final

int BorrarElementoListaFinal(Nodo **Inicio)

{

    Nodo *Borrar=NULL;;

    Nodo *Recorrer=NULL;

    Nodo *Anterior;

    Recorrer=*Inicio;

    if(Recorrer==NULL) {

     printf("\nNo existen elementos que borrar\n");

     return -1;

    }

    // Mientras no se llegue al ultimo elemento

    while(Recorrer->Siguiente!=NULL) {

      Borrar = Recorrer;

      Recorrer= Recorrer->Siguiente;

    }

    // Si borrar es null es que solo existe un elemento

   // y por tanto el valor de inicio ha de cambiar si no

   // es así existen mas elementos y se ha borrar el ultimo

   if(Borrar==NULL) {

       Borrar = *Inicio;

      *Inicio = NULL;

      free (Borrar);

   } else {

     free(Borrar->Siguiente);

     Borrar->Siguiente=NULL;

   }

    return 0;    

}

Los ejercicios y prácticas resueltas del ejercicio anterior muestran en pantalla como resultado la siguiente imagen:

Ejercicios y Prácticas con solución

 

 

Navegacion SeriesAnterior en la serie...Siguiente en la serie...

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies