Last active
November 28, 2023 17:11
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@Andrik-Ts-019
Así es digamos es la idea y bueno si se agradecería lo del ejemplo si no es molestia lml