Estructuras de Datos Lineales
En este tema se estudia la primera gran familia de TADs, todos ellos derivados del concepto de secuencia. Primero se definen las secuencias como conjuntos de elementos entre los que se establece una relación de predecesor y sucesor. Los diferentes TADs basados en este concepto se diferenciaran por las operaciones de acceso a los elementos y manipulación de la estructura. Desde el punto de vista de la informática, existen tres estructuras lineales especialmente importantes: las pilas, las colas y las listas. Su importancia radica en que son muy frecuentes en los esquemas algorítmicos.

Las operaciones básicas para dichas estructuras son:

  • crear la secuencia vacía
  • añadir un elemento a la secuencia
  • borrar un elemento a la secuencia
  • consultar un elemento de la secuencia
  • comprobar si la secuencia está vacía
La diferencia entre las tres estructuras que se estudiarán vendrá dada por la posición del elemento a añadir, borrar y consultar:
  • Pilas: las tres operaciones actúan sobre el final de la secuencia
  • Colas: se añade por el final y se borra y consulta por el principio
  • Listas: las tres operaciones se realizan sobre una posición privilegiada de la secuencia, la cual puede desplazarse
Se presenta el TAD de las pilas de elementos arbitrarios. Tras especificarlo, se muestra su implementación en vector (posteriormente se verá su implementación con memoria dinámica) y se discuten sus ventajas y desventajas.

Después se muestran las colas siguiendo un proceso idéntico al del subtema anterior. Se presenta y discute la implementación en vector circular (también posteriormente se verá su implementación en memoria dinámica).

Respecto a las listas, dado que hay muchas versiones diferentes se escoge una como base. Concretamente las listas con punto de interés, donde existe un elemento que sirve de referencia a las operaciones de inserción, supresión y consulta. Estas listas tienen el interés añadido de que son equivalentes a la noción de secuencia que los estudiantes conocen de Programación. Se da una especificación formal de estas listas y se discuten las diferentes implementaciones. Tras considerar una implementación secuencial, que resulta ineficiente en general, se detalla la representación encadenada, mucho más eficiente (coste constante en todas las operaciones), usando vectores. En la representación encadenada se ve la utilidad de introducir un elemento fantasma, que evita casos especiales en los algoritmos y simplifica el código.

Ante el problema de previsión de memoria necesaria a reservar, se presenta la utilización de memoria dinámica. Se exponen todos los inconvenientes asociados al uso de memoria dinámica (generación de basura, referencias colgadas, compartición de memoria, etc.) y se ilustran los peligros asociados a las implementaciones que los usan. Se muestra de forma muy natural la implementación con punteros de las listas, y se recuerdan las pilas y las colas comentando su implementación dinámica.

Para terminar se presentan algunas variantes de la representación encadenada. En particular las listas circulares y las listas doblemente encadenadas. Para cada una de ellas se muestra su utilidad en distintos contextos.

4.1 Pilas
4.2 Colas
4.3 Listas con punto de interés
4.4 Memoria dinámica
4.5 Otros tipos de listas


  Autoría
Correo de contacto
Fecha de actualización