> 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/listas.md).

# Listas

Unha **Lista** é unha **estrutura de datos lineal** que consiste nunha colección de elementos organizados nunha orde específica.&#x20;

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

As principais características das listas son:

* Son **dinámicas**: A diferenza dos arrays, son flexibiles para medrar ou minguar dinamicamente, e non precisan declarar en código o seu tamaño exacto. A nivel de memoria, o seu comportamento é diferente:
  * Un array reserva toda a memoria de forma contigua en tempo de compilación
  * Unha lista, ira reservando ocos non contiguos en función das necesidades
* &#x20;Permite **insercións e borrados de elementos en calquera posición** (inicio, medio, final). A nivel de custo:
  * Inserción ao principio de unha lista: O(1)
  * Inserción ao principio de un array: O(n), xa que implica mover todos os elemento a dereita
* Acceso **secuencial** aos elemento&#x73;**:**
  * Acceso ao elemento n de unha lista: O(n), ten que recorrer os n-1 elementos previos&#x20;
  * Acceso ao elemento n de un array: O(1), ten acceso directo

Un posible exemplo de comportamento das listas sería o seguinte:

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

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

{% hint style="warning" %}
Para que unha Lista poda realizar de maneira correcta as operacións, **os seus elementos deben ter alomenos o método equals implementado correctamente**
{% endhint %}

## Variantes de implementación

A nivel teórico, existen diferentes variantes de listas con comportamento común pero implementación diferente en función das necesidades:

* **Lista enlazada:** Implementación simple, cada nodo apunta ao seguinte, e o ultimo a null. Eficiente para percorrer en unha dirección.
* **Lista dobremente enlazada:** Cada nodo apunta ao seguinte é o anterior. O anterior do primeiro e o seguinte do último son null. Mais complexa, permite recorrer a lista cara adiante e cara atras.
* **Lista circular:** O últmo apunta ao primeiro. Non hay que xestionar nulos, pero hai que ter coidado cos bucles infinitos para finalizar os recorridos.

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


---

# 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/listas.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.
