## Bloque 2 Tema 3. Tipos abstractos y estructuras de datos. Organizaciones de ficheros. Algoritmos. Formatos de información y ficheros.

En este tema se estudian los conceptos fundamentales de programación y tratamiento de la información desde un punto de vista teórico y abstracto. En el examen TAI no se pregunta código, sino definiciones, clasificaciones y conceptos básicos. Es un tema típico de preguntas conceptuales, confusiones terminológicas y verdadero o falso.

---

## 1. Tipos abstractos de datos

Un tipo abstracto de datos, abreviado como TAD, es una definición lógica de un conjunto de datos y de las operaciones que se pueden realizar sobre ellos, sin especificar cómo se implementa internamente. Dicho de otra forma, un TAD define qué hace, pero no cómo se hace.

Las características de los tipos abstractos de datos son tres: abstracción, independencia de la implementación y encapsulación de datos y operaciones.

Ejemplos de tipos abstractos de datos son la pila, la cola y la lista.

En resumen: TAD es igual a datos más operaciones. No define la implementación.

---

## 2. Estructuras de datos

Una estructura de datos es la forma concreta de organizar y almacenar datos en memoria para facilitar su acceso y modificación.

La diferencia clave respecto al tipo abstracto de datos es que el TAD es un concepto abstracto, mientras que la estructura de datos es su implementación concreta.

Las estructuras de datos se clasifican en dos grandes grupos según su organización: lineales y no lineales.

Las estructuras de datos lineales son aquellas en las que los elementos se organizan uno detrás de otro, como en una fila. Las más habituales son cuatro: los arrays o vectores, que permiten acceso por índice numérico; las listas, cuyos elementos están enlazados entre sí; las pilas, que siguen el principio LIFO, es decir, último en entrar primero en salir; y las colas, que siguen el principio FIFO, es decir, primero en entrar primero en salir.

Para distinguir pila y cola conviene usar dos imágenes mentales. La pila es como una pila de platos: el último plato que se pone encima es el primero que se coge. Eso es LIFO: Last In, First Out. La cola es como la cola del supermercado: el primero que llegó es el primero al que atienden. Eso es FIFO: First In, First Out.

Las estructuras de datos no lineales son aquellas en las que los elementos pueden tener múltiples conexiones entre sí, sin un orden lineal. Los dos tipos principales son los árboles y los grafos.

---

## 3. Recorridos de árboles

Un árbol es una estructura jerárquica con un nodo raíz del que cuelgan ramas y hojas. Para recorrer un árbol, es decir, para visitar todos sus nodos, existen cuatro formas principales.

Imaginemos el siguiente árbol: el nodo raíz es A, que tiene dos hijos, B y C. El nodo B a su vez tiene dos hijos, D y E.

Los tres recorridos en profundidad, llamados DFS por sus siglas en inglés Depth-First Search, se diferencian únicamente por cuándo se visita la raíz respecto a sus hijos.

En el recorrido en pre-orden se visita primero la raíz, luego los hijos de la izquierda y finalmente los de la derecha. El resultado con nuestro árbol sería A, B, D, E, C. El truco para recordarlo es que "pre" significa "primero", y la raíz va primero.

En el recorrido en in-orden se visita primero la rama izquierda, luego la raíz y luego la rama derecha. El resultado sería D, B, E, A, C. La raíz queda en medio.

En el recorrido en post-orden se visitan primero las ramas izquierda y derecha y la raíz queda al final. El resultado sería D, E, B, C, A. El truco es que "post" significa "después", y la raíz va después.

El cuarto recorrido es el recorrido por niveles, también llamado BFS por Breadth-First Search. Este recorrido visita los nodos nivel a nivel, de arriba hacia abajo y de izquierda a derecha. El resultado sería A, B, C, D, E.

---

## 4. Recorridos de grafos

Un grafo es una estructura más libre que el árbol, en la que cualquier nodo puede conectarse con cualquier otro, y pueden existir ciclos.

Los dos algoritmos principales para recorrer un grafo son el BFS y el DFS.

El BFS, o búsqueda en anchura, avanza nivel a nivel desde el nodo de inicio, expandiéndose como las ondas que forma una piedra al caer en el agua. Internamente usa una cola, que sigue el principio FIFO, porque procesa los nodos en el mismo orden en que los va encontrando.

El DFS, o búsqueda en profundidad, sigue un camino hasta el fondo, y cuando no puede avanzar más retrocede e intenta por otro camino. La imagen mental es explorar un laberinto. Internamente usa una pila, que sigue el principio LIFO, porque retrocede al último punto visitado.

La trampa típica de examen es confundir qué estructura usa cada algoritmo. BFS usa cola y DFS usa pila. La lógica es sencilla: BFS procesa en orden de llegada, por eso FIFO y cola. DFS retrocede al último punto, por eso LIFO y pila.

---

## 5. Organizaciones de ficheros

Un fichero es un conjunto de registros relacionados, almacenados en un soporte de almacenamiento e identificado por un nombre.

Dentro de un fichero, la unidad mínima de información es el campo. Un conjunto de campos relacionados forma un registro. Y un conjunto de registros forma el fichero.

Los ficheros se pueden organizar de tres formas según cómo se accede a sus registros.

La organización secuencial accede a los registros en orden, uno detrás de otro, desde el primero hasta el último. Es la más sencilla pero la menos eficiente para búsquedas.

La organización directa o aleatoria permite acceder directamente a cualquier registro sin recorrer los anteriores, como en un diccionario cuando saltas directamente a la página de una letra.

La organización indexada usa un índice auxiliar que almacena las posiciones de los registros para localizarlos rápidamente.

En resumen: secuencial accede en orden, directa accede sin pasos intermedios, indexada usa índices para localizar rápido.

---

## 6. Algoritmos

Un algoritmo es un conjunto finito y ordenado de instrucciones que permite resolver un problema. La clave es que debe ser finito: siempre debe terminar.

Las características que debe cumplir todo algoritmo son tres: debe ser finito, es decir, que termine en algún momento; debe ser preciso, es decir, que cada instrucción sea clara y sin ambigüedad; y debe ser definido, es decir, que para los mismos datos de entrada siempre produzca el mismo resultado.

Los algoritmos se pueden representar de tres formas: en lenguaje natural, mediante pseudocódigo, o mediante diagramas de flujo.

En el examen TAI no se pide programar ni escribir código. Solo hay que identificar conceptos y características.

En resumen: algoritmo es igual a pasos ordenados para resolver un problema. Debe ser finito, preciso y definido.

---

## 7. Formatos de información y ficheros

Un formato de fichero define la estructura y codificación de los datos almacenados en un archivo. Dicho de otra forma, el formato determina cómo están organizados internamente los datos dentro del archivo.

Los formatos se clasifican en dos tipos según su naturaleza. Los formatos de texto almacenan la información como texto legible directamente por humanos. Los formatos binarios almacenan la información en código binario, que no es legible directamente sin un programa específico.

Los formatos de texto más habituales que hay que conocer son TXT, CSV, XML y JSON. Los formatos binarios más habituales son PDF, DOCX, XLSX y JPG.

En resumen: texto es legible, binario no lo es directamente. El formato define cómo se almacenan los datos.

---

## Miniresumen final del tema

Los tipos abstractos de datos definen qué operaciones se pueden hacer, sin especificar cómo. Las estructuras de datos son las implementaciones concretas. Las hay lineales, como el array, la lista, la pila y la cola, y no lineales, como los árboles y los grafos. Los árboles se recorren en pre-orden, in-orden, post-orden o por niveles. Los grafos se recorren con BFS usando cola, o con DFS usando pila. Los ficheros organizan registros y campos, con acceso secuencial, directo o indexado. Un algoritmo es finito, preciso y definido. Los formatos de fichero pueden ser de texto o binarios.
