> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud6-estructuras-de-datos-avanzadas/page-2.md).

# Estructuras de datos e Tipos abstractos de datos (TAD)

<figure><img src="/files/vx0PnspT6e3guxhVRQ8J" alt=""><figcaption></figcaption></figure>

Un dos aspectos fundamentais do módulo reside en que un programador debe de ser capaz de traballar con coleccións de datos con un deseño lóxico e unha implementación adecuadas ao problema que queremos resolver. Neste apartado falaremos dos concepto de tipo de dato abstracto (TAD) e estructura de datos, serán as ferramentas que nos permitirán solucionar este tipo de problemas.

## Tipo abstracto de datos (TAD)

Un **tipo abstracto de datos(TAD)** é un modelo lóxico (nivel conceptual) que define un conxunto de dato e as operacións que se poden realizar sobre eles, sen especificar a súa implementación.

| **Especifica**                    | **No especifica**                |
| --------------------------------- | -------------------------------- |
| Qué datos existen                 | Cómo se almacenan los datos      |
| Qué operaciones se permiten       | Qué estructuras internas se usan |
| Comportamiento de las operaciones | Uso de memoria e tempos          |

Un exemplo de TAD sería unha pila, da que se lembrades falamos no tema de recursividade. Este tipo abstracto de datos caracterizase por que:

* Almacena unha colección de datos
* Permite apilar (push) e desapilar (pop)
* Seguindo un comportamento LIFO (Last In First Out)

Un exemplo de uso de pila podería ser a funcionalidade de Desfacer (Ctrl+Z) de un procesador de texto (Microsoft Word, Google Docs,...), tal e como se mostra no exemplo de abaixo:

{% embed url="<https://codepen.io/Iago-Magide-Rey/pen/GgjBzrQ>" %}

## Estructura de datos

Unha estructura de datos é unha implementación concreta (nivel físico) de un TDA nunha linguaxe de programación. É a forma de organizar e almacenar datos en memoria, xunto cos algoritmos que permiten as operacións sobre eles.

| Especifica                                               |
| -------------------------------------------------------- |
| Cómo se almacenan os datos                               |
| Cómo se implementan as operacións                        |
| Qué recursos se utilizan (memoria e tempos de execución) |

Voltando o exemplo anterior, unha pila pode implementarse de diferentes formas:

* Pila implementada mediante un array
* Pila implementada mediante unha lista enlazada
* Pila implementada mediante a clase Stack

## TADs e Estructuras de datos

| **Característica** | **Tipo de Dato Abstracto (TDA)**       | **Estrutura de Datos**                       |
| ------------------ | -------------------------------------- | -------------------------------------------- |
| Nivel              | Teórico / Lóxico / Deseño              | Práctico / Físico / Implementación           |
| Pregunta clave     | Que operacións pode facer?             | Como se almacena e se procesa?               |
| Exemplo            | Lista, Pila, Cola, Mapa ,Grafo, Árbore | Array, ArrayList, Stack, LinkedList, HashMap |
| Representación     | Especificación (Interface conceptual)  | Implementación (Clases, estructuras)         |

{% hint style="warning" %}
**Un mesmo TAD pode ter múltiples implementacións mediante distintas estruturas de datos**
{% endhint %}

## TADs mais empregados

A continuación imos a mencionar unha serie de TADs que se empregan frecuentemente:

* **Pilas:** TAD que permite almacenar unha colección de elementos de forma lineal nunha orde especifica. Emprega a estratexia LIFO (Last In, First Out).
* **Colas:** TAD que permite almacenar unha colección de elementos de forma lineal nunha orde especifica. Emprega a estratexia FIFO (First In, First Out).
* **Listas:** TAD que permite almacenar unha colección de elementos de forma lineal en orde. Os elementos de unha lista poden ser accedidos secuencialmente, diferenciase dos anteriores en que se poden engadir, eliminar ou accceder elementos en calquera posición.
* **Conxunto**: TAD que permite almacenar unha colección de elementos únicos sen ningunha orde específica. Non permite elementos duplicados.
* **Árbore:** TAD que permite almacenar unha colección de elementos de forma no lineal e xerarquica. Adoita empregarse para representar relacións pai-fillo, almacenando a información ordenada.
* **Gráfo:** TAD que permite almacenar unha colección de elementos de forma no lineal. Consiste nun conxunto de vértices (nodos) e un conxunto de arestas (conexións) que os conectan.
* **Táboas Hash (Mapas):** TAD que permite xestionar pares clave - valor mediante o uso de unha función hash. Non ten orde e non admite duplicados nas claves.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud6-estructuras-de-datos-avanzadas/page-2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
