Listas enlazadas en C: ejemplos y aplicaciones
Una lista enlazada es una estructura de datos que almacena una secuencia de elementos, cada uno con un puntero al siguiente. Las listas enlazadas son una alternativa a los arreglos, que tienen un tamaÃo fijo y una ubicaciÃn contigua en la memoria. Las listas enlazadas ofrecen algunas ventajas sobre los arreglos, como:
- Se pueden insertar y eliminar elementos de forma dinÃmica sin desperdiciar ni reubicar memoria.
- Se pueden recorrer en cualquier direcciÃn si son doblemente enlazadas, es decir, si cada elemento tiene un puntero al anterior y al siguiente.
- Se pueden implementar otras estructuras de datos, como pilas, colas y Ãrboles, usando listas enlazadas.
En este artÃculo, veremos algunos ejemplos de cÃmo crear y manipular listas enlazadas en el lenguaje de programaciÃn C.
DefiniciÃn de una lista enlazada
Para definir una lista enlazada en C, necesitamos crear un tipo de dato que represente un nodo de la lista. Un nodo tiene dos campos: uno para almacenar el valor del elemento y otro para guardar la direcciÃn del siguiente nodo. Por ejemplo:
struct nodo
int valor; // el valor del elemento
struct nodo *siguiente; // el puntero al siguiente nodo
;
AdemÃs, necesitamos una variable que apunte al primer nodo de la lista, llamada cabeza o head. Si la lista està vacÃa, la cabeza serà NULL. Por ejemplo:
struct nodo *head = NULL; // lista vacÃa
InserciÃn de un elemento al inicio de la lista
Para insertar un elemento al inicio de la lista, debemos seguir los siguientes pasos:
- Crear un nuevo nodo y asignarle el valor del elemento.
- Hacer que el nuevo nodo apunte al primer nodo de la lista.
- Hacer que la cabeza apunte al nuevo nodo.
Por ejemplo, si queremos insertar el valor 5 al inicio de la lista, podemos hacer lo siguiente:
// crear un nuevo nodo
struct nodo *nuevo = (struct nodo *) malloc(sizeof(struct nodo)); // reservar memoria
nuevo->valor = 5; // asignar el valor
nuevo->siguiente = NULL; // inicializar el puntero
// insertar el nuevo nodo al inicio
nuevo->siguiente = head; // hacer que el nuevo nodo apunte al primer nodo
head = nuevo; // hacer que la cabeza apunte al nuevo nodo
EliminaciÃn de un elemento al inicio de la lista
Para eliminar un elemento al inicio de la lista, debemos seguir los siguientes pasos:
- Verificar que la lista no està vacÃa.
- Guardar la direcciÃn del primer nodo en una variable temporal.
- Hacer que la cabeza apunte al segundo nodo de la lista.
- Liberar la memoria del nodo eliminado.
Por ejemplo, si queremos eliminar el primer elemento de la lista, podemos hacer lo siguiente:
// verificar que la lista no està vacÃa
if (head != NULL)
// guardar la direcciÃn del primer nodo
struct nodo *temp = head;
// hacer que la cabeza apunte al segundo nodo
head = head->siguiente;
// liberar la memoria del nodo eliminado
free(temp);