Estructuras de datos Lineales/ Listas enlazadas

Listas Enlazadas 

 

Las listas al igual que las pilas y las colas, son una estructura de datos de tipo lineal  diferenciándose de las anteriores en el hecho de que pueden las  inserciones y eliminaciones se  en cualquier parte de la lista. Esto hace que tengan mayor aplicabilidad en el entorno real. Se abordan los temas relacionados con los conceptos básicos de las listas, así como tipos de listas y  las operaciones que se pueden realizar con las listas, todo conjugado en programas de aplicación, implementados con apuntadores. Es importante tener en cuenta que una estructura de datos lineal pueden representarse en memoria ya sea a través de arreglos  o a través de listas enlazadas implementadas haciendo uso de los apuntadores y por ende con la gestión de memoria dinámica que se asigna en tiempo de ejecución.

Concepto básicos de Listas

Una lista puede considerarse como una colección o secuencia de elementos del mismo tipo que van en una posición uno de tras del otro,  a este tipo de lista se le conoce como lista continua,  esta es una definición general, que incluye los ficheros y vectores.

 Las entradas de una guía o directorio telefónico, por ejemplo, están en líneas sucesivas, excepto en las partes superior e inferior de cada columna.  Una lista lineal se almacena en la memoria principal de una computadora en posiciones sucesivas de memoria;  en el caso cuando se almacenan en cinta magnética, los elementos sucesivos se presentan en sucesión en la cinta.  Esta asignación de memoria se denomina almacenamiento secuencial.

Una lista lineal se almacena en la memoria de la computadora en posiciones sucesivas o adyacentes y se procesa como un arreglo unidimensional. En este caso, el acceso a cualquier elemento de la lista es fácil; sin embargo, la inserción o borrado requiere un desplazamiento de lugar de los elementos que le siguen y en consecuencia el diseño de un algoritmo específico.

Para permitir operaciones con las listas como arreglos se deben dimensionar éstos con tamaño suficiente para que contengan todos los posibles elementos de la lista.

La inserción o eliminación de un elemento, excepto en la cabecera o final de la lista, necesita una traslación de un parte de los elementos de la misma: la que precede o sigue a la posición del elemento modificado.

Las operaciones directas de añadir y eliminar se efectúan únicamente en los extremos de la lista.  Esta limitación es una de las razones por las que esta estructura  de lista continua es poco utilizada.

 

Veamos una representación gráfica de una lista continua.

Imagen 1. Representación gráfica de una lista contigua

Lista contigua

Como se puede apreciar en la figura 1, se trata de una lista contigua de elementos de tipo entero representados en un arreglo unidimensional de 6 campos, de tal manera que no es posible insertar un nuevo elemento por que la lista está completa, esta es una de las desventajas de este tipo de lista.

Posteriormente, se verá que existe otro tipo de almacenamiento denominado encadenado o enlazado. Naciendo así el concepto de las listas enlazadas, veamos en que consiste.

Listas enlazadas:  es una colección o secuencia de elementos del mismo tipo dispuestos uno detrás de otro, en el que cada elemento se liga al siguiente elemento por un enlace que no es más que un puntero previamente definido dentro de los miembros de la estructura .

 Las listas según su estructura se han dividido en cuatro grandes categorías:

  • Listas Simplemente enlazadas
  • Listas Doblemente enlazadas
  • Listas Circular simplemente enlazada
  • Lista circular doblemente enlazada

Las listas enlazadas o de almacenamiento enlazado son mucho más flexibles y potentes, su uso es mucho más amplio comparado con la lista contigua.

 Una lista enlazada o encadenada es un conjunto de elementos del mismo tipo en los que cada elemento contiene la posición o dirección del siguiente elemento de la lista.  Cada elemento de la lista enlazada debe tener al menos dos campos: un campo que tiene el valor del elemento y un campo (enlace o liga) que contiene la posición del siguiente elemento, es decir, su conexión, enlace o encadenamiento.  Los elementos de una lista son enlazados por medio de los campos enlaces.

Una lista enlazada sin ningún elemento se llama lista vacía.  Su puntero inicial o de cabecera tiene el valor nulo, es decir apunta a NULL.

 *puntero ->NULL;   haciendo uso de la sintaxis de C++ puede expresarse como:  *puntero=NULL;

 

Imagen 2. Representación gráfica de las listas enlazadas

tiposdelistas

 

 

 

Operaciones con las listas enlazadas

Generalmente las operaciones básicas que se pueden realizar en una lista enlazada son las siguientes:

Operación de Inserción. Esta operación consiste en agregar un nuevo elemento a la lista. Se pueden considerar tres casos especiales:

  • Insertar un elemento al inicio de la lista.
  • Insertar un elemento antes o después de un determinado elemento o nodo de la lista.
  • Insertar un elemento al final de la lista.

Operación de Visualización. Esta operación consiste en mostrar o visualizar los elementos de la lista que han sido insertados o almacenados previamente en la estructura, para lo cual se hace el recorrido para ir mostrando en pantalla cada elemento de la lista iniciando desde la cabeza hasta llegar al ultimo nodo,  es decir,cuando el nodo siguiente es igual a NULL.

Operación de Recorrido. Esta operación consiste en visitar cada uno de los elementos que forman la lista. Para ello se comienza con el primer elemento, se toma el valor del campo enlace para avanzar al segundo elemento, el campo enlace de este elemento dará la dirección del tercer elemento y así sucesivamente hasta que la información del campo enlace sea NULL, lo que indica que el recorrido llegó a su final.

Operación de Búsqueda. Esta operación consiste en buscar un determinado elemento en la lista, que es solicitado por el usuario en tiempo de ejecución, se procede a  hacer la comparación entre el elemento a buscar con  cada uno de los elementos previamente ingresados a la lista , el recorrido se hace  tomando al campo enlace como puntero al siguiente elemento a visitar en la lista, una vez se encuentre el elemento se procede a mostrarlo en pantalla.

Operación de Borrado. La operación de borrado consiste en eliminar  un elemento de la lista, se pueden presentar cuatro casos básicos:

  • Eliminar el primer elemento de la lista.
  • Eliminar el último elemento de la lista.
  • Eliminar de la lista un elemento específico, es decir, que tenga cierta información independientemente de su ubicación.

Implementación de una lista enlazada con punteros

El siguiente programa se plantea como ejemplo guía para implementar una lista simplemente enlazada con punteros, para gestionar números enteros, ingresados por teclado con funciones de insertar, eliminar, recorrer y buscar.

Las eliminaciones se realizan en cualquier lugar de la lista.

 Programa  Lista.cpp

lista1

Lista2

Lista3

Lista5

 

El resultado dela salida en pantalla del listado anterior se puede observar en la siguiente imagen.

Imagen 4. Salida en pantalla del programa Lista.Cpp

SalidaLista

Analice el código y plantee modificaciones al programa, en busca de mejoras, una de ellas puede ser implementar el programa a través de un menú de opciones con funciones que respondan a cada opción, de Insertar, visualizar, buscar y eliminar.