Prerrequisitos
Los prerrequisitos son los tipos de datos, las estructuras, el uso de typedef, los punteros y las funciones usuario.
Introducción
El objetivo de este artículo es el de comprender el uso de las listas enlazadas simples. Las listas enlazadas pueden ser utilizadas cuando se necesitan hacer varias operaciones de inserción y eliminación de elementos.
Definición
Las listas enlazadas son estructuras de datos semejantes a los array salvo que el acceso a un elemento no se hace mediante un indice sino mediante un puntero.
La asignación de memoria es hecha durante la ejecución.
En una lista los elementos son contiguos en lo que concierne al enlazado.
En cambio, mientras que en un array los elementos están contiguos en la memoria, en una lista los elementos están dispersos. El enlace entre los elementos se hace mediante un puntero. En realidad, en la memoria la representación es aleatoria en función del espacio asignado.
El puntero siguiente del último elemento tiene que apuntar hacia NULL (el fin de la lista).
Para acceder a un elemento, la lista es recorrida comenzando por el inicio, el puntero Siguientepermite el cambio hacia el próximo elemento.
El desplazamiento se hace en una sola dirección, del primer al último elemento.
Si deseas desplazarte en las dos direcciones (hacia delante y hacia atrás) deberás utilizar las listas doblemente enlazadas.
Construcción del modelo de un elemento de la lista
Para establecer un elemento de la lista, será utilizado el tipo struct. El elemento de la lista tendrá un campo dato y un puntero siguiente.
El puntero siguiente tiene que ser del mismo tipo que el elemento, si no, no podrá apuntar hacia el elemento. El puntero siguiente permitirá el acceso al próximo elemento.
Para tener el control de la lista es preferible guardar determindos elementos: el primer elemento, el último elemento, el número de elementos. Para ello será empleado otra estructura (no es obligatorio, pueden ser utilizadas variables).
El puntero inicio tendrá la dirección del primer elemento de la lista. El puntero fin albergará la dirección del último elemento de la lista. La variable tamaño contiene el número de elementos.
Cualquiera sea la posición en la lista, los punteros inicio y fin apuntan siempre al primer y último elemento. El campo tamaño contendrá al numero de elementos de la lista cualquiera sea la operación efectuada sobre la lista.
Operaciones sobre las listas enlazadas
Para la inserción y la eliminación, una única función bastará si está bien concebida de acuerdo a lo que se necesite. Debo recordar que este artículo es puramente didáctico. Por lo tanto, he escrito una función para cada operación de inserción y eliminación.
Inicialización
Modelo de la función:
Esta operación debe ser hecha antes de otra operación sobre la lista.
Esta comienza el puntero inicio y el puntero fin con el puntero NULL, y el tamaño con el valor 0.
Inserción de un elemento en la lista
A continuación el algoritmo de inserción y el registro de los elementos: declaración del elemento que se va a insertar, asignación de la memoria para el nuevo elemento, llena el contenido del campo de datos, actualización de los punteros hacia el primer y último elemento si es necesario. Caso particular: en una lista con un único elemento, el primero es al mismo tiempo el último. Actualizar el tamaño de la lista
Para añadir un elemento a la lista se presentan varios casos: la inserción en una lista vacía, la inserción al inicio de la lista, la inserción al final de la lista y la inserción en otra parte de la lista.
Inserción en una lista vacía
La función retorna 1 en caso de error, si no devuelve 0.
Las etapas son asignar memoria para el nuevo elemento, completa el campo de datos de ese nuevo elemento, el puntero siguiente de este nuevo elemento apuntará hacia NULL (ya que la inserción es realizada en una lista vacía, se utiliza la dirección del puntero inicio que vale NULL), los punteros inicio y fin apuntaran hacia el nuevo elemento y el tamaño es actualizado
La función
Te esperamos en la segunda parte del articulo y otros en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.