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:
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.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 |