Skip to content

Instantly share code, notes, and snippets.

@ArgiesDario
Last active November 28, 2023 17:11
Show Gist options
  • Star 24 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save ArgiesDario/da409828e81ef441186268b8ee3acd5f to your computer and use it in GitHub Desktop.
Save ArgiesDario/da409828e81ef441186268b8ee3acd5f to your computer and use it in GitHub Desktop.
Programación en C – Listas Enlazadas – Que son y cómo se usan
#include <stdio.h>
#include <stdlib.h>
typedef struct snodo{ //snodo es el nombre de la estructura
int valor;
struct snodo *sig; //El puntero siguiente para recorrer la lista enlazada
}tnodo; //tnodo es el tipo de dato para declarar la estructura
typedef tnodo *tpuntero; //Puntero al tipo de dato tnodo para no utilizar punteros de punteros
void insertarEnLista (tpuntero *cabeza, int e);
void imprimirLista (tpuntero cabeza);
void borrarLista (tpuntero *cabeza);
int main(){
int e;
tpuntero cabeza; //Indica la cabeza de la lista enlazada, si la perdemos no podremos acceder a la lista
cabeza = NULL; //Se inicializa la cabeza como NULL ya que no hay ningun nodo cargado en la lista
printf("Ingrese elementos, -1 para terminar: ");
scanf("%d",&e);
while(e!=-1){
insertarEnLista (&cabeza, e);
printf ("Ingresado correctamente");
printf ("\n");
printf("Ingrese elementos, -1 para terminar: ");
scanf("%d",&e);
}
printf ("\nSe imprime la lista cargada: ");
imprimirLista (cabeza);
printf ("\nSe borra la lista cargada\n");
borrarLista (&cabeza);
printf ("\n");
system ("PAUSE");
return 0;
}
void insertarEnLista (tpuntero *cabeza, int e){
tpuntero nuevo; //Creamos un nuevo nodo
nuevo = malloc(sizeof(tnodo)); //Utilizamos malloc para reservar memoria para ese nodo
nuevo->valor = e; //Le asignamos el valor ingresado por pantalla a ese nodo
nuevo->sig = *cabeza; //Le asignamos al siguiente el valor de cabeza
*cabeza = nuevo; //Cabeza pasa a ser el ultimo nodo agregado
}
void imprimirLista(tpuntero cabeza){
while(cabeza != NULL){ //Mientras cabeza no sea NULL
printf("%4d",cabeza->valor); //Imprimimos el valor del nodo
cabeza = cabeza->sig; //Pasamos al siguiente nodo
}
}
void borrarLista(tpuntero *cabeza){
tpuntero actual; //Puntero auxiliar para eliminar correctamente la lista
while(*cabeza != NULL){ //Mientras cabeza no sea NULL
actual = *cabeza; //Actual toma el valor de cabeza
*cabeza = (*cabeza)->sig; //Cabeza avanza 1 posicion en la lista
free(actual); //Se libera la memoria de la posicion de Actual (el primer nodo), y cabeza queda apuntando al que ahora es el primero
}
}
@dvlprDiego
Copy link

Me sirvió mucho, gracias!

@larchadrg
Copy link

Se que pasó bastante tiempo desde su publicación, pero muchisimas gracias! Estoy viendo el tema para la universidad y no lograba crear por mi cuenta un programa que manipule listas enlazadas de forma modular, aun se me complica un poco el tema de los punteros. Me ayudaste un montón, el programa es claro y fue muy útil ver a alguien trabajandolo en español.

@abelyi7
Copy link

abelyi7 commented Jan 26, 2021

Gracias, podrías por favor indicarnos cómo quedaría la función insertarEnLista si no hubieramos hecho el
typedef tnodo *tpuntero;

sé que es con puntero doble, pero no lo logro comprender

@abelyi7
Copy link

abelyi7 commented Jan 26, 2021

Ok, ya lo resolví. habría quedado:

void insertarEnLista (tnodo **cabeza, int e){
tnodo *nuevo = malloc(sizeof(tnodo)); //Creamos un nuevo nodo y Utilizamos malloc para reservar memoria para ese nodo
nuevo->valor = e; //Le asignamos el valor ingresado por pantalla a ese nodo
nuevo->sig = *cabeza; //Le asignamos al siguiente el valor de cabeza
*cabeza = nuevo; //Cabeza pasa a ser el ultimo nodo agregado
}

Aunque admito que fue probando y descartando, ahora me toca hacer un gran prueba de escritorio para ver que es lo que sucede y comprenderlo

@Constancio1702
Copy link

Hola!
Alguien puede apoyarme con esta actividad: ando trabajando con lenguaje C

  1. Realizar un programa en el lenguaje de C con el siguiente planteamiento:
    A) Pregunta al usuario cuantos elementos quiere usar.
    B) Crea un arreglo con valores enteros de la longitud que el usuario haya elegido.
    C) Llena el arreglo con valores elegidos por el usuario.
    D) Despliega en pantalla un menú con las siguientes opciones:
  2. ordenamiento burbuja
  3. ordenamiento inserción
  4. ordenamiento selección
  5. ordenamiento quickSort
  6. búsqueda secuencial
  7. búsqueda binaria
  8. salir
    E) Para las opciones 1, 2, 3, 4 despliega en pantalla el ordenamiento en forma ascendente del conjunto de valores que el usuario haya guardado en el arreglo.
    F) Para las opciones 5 y 6 despliega en pantalla los valores que el usuario haya guardado en el arreglo y pregunta qué valor quiere buscar (sólo buscará un valor).
    G) Despliega en pantalla la posición del valor encontrado y el valor encontrado.

Saludos!

@EddyRocket386
Copy link

Hola, alguien me puede decir como se puede aplicar digamos con personas, cunado el usuario pida su nombre, edad y si es hombre o mujer?
Y digamos que le prioridad a mujeres y/o adultos mayores???

@EddyRocket386
Copy link

P

Hola, alguien me puede decir como se puede aplicar digamos con personas, cunado el usuario pida su nombre, edad y si es hombre o mujer?
Y digamos que le prioridad a mujeres y/o adultos mayores???

@EddyRocket386
En tu estructura debes de agregar los datos que necesitas, se más específico, ¿quieres llenar una lista para después pedirla?, ¿quieres que esté ordenada según el sexo y edad?

@Andrik-Ts-019
Bueno digamos que los datos que va a trabajar se pidan desde teclado, los cuales son los que mencionaba (nombre, edad, sexo) y hacerlo digamos que evalúe con una condicional, si la persona es mayor de edad lo mande al principio y recorra los demás.

@EddyRocket386
Copy link

@Andrik-Ts-019
Así es digamos es la idea y bueno si se agradecería lo del ejemplo si no es molestia lml

@EddyRocket386
Copy link

@Andrik-Ts-019
Al contrario, te agradezco el apoyo y orientación con tu material!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment