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
}
}
@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