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

# Colas

Unha **Cola** é unha estrutura de datos lineal que segue o principio **FIFO (*****First In, First Out*****)**, o que significa que o primeiro elemento en entrar é o primeiro en saír.

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

As principais características das colas son:

* **Acceso restrinxido polos dous extremos:** A diferenza da pila (que só ten un acceso), a cola opera por ambos lados:
  * **Engadimos ao final** (Rear/Back).
  * **Eliminamos polo inicio** (Front).
* **Comportamento Dinámico:** Poden implementarse mediante nodos ligados, o que permite que a cola medre segundo cheguen novos elementos sen necesidade de mover os que xa están agardando.
* **Operacións Atómicas:** As operacións principais son de custo constante:
  * **Enqueue (Encolar)**: Engadir ao final. Custo: O(1).
  * **Dequeue (Descolar)**: Retirar do inicio. Custo: O(1).
  * **Peek/Front:** Consultar o primeiro sen quitalo. Custo: O(1).

{% hint style="warning" %}
Para poder traballar con este custo de operecións, é **habitual que se implemente a estructura mediante un punteiro ao primeiro e ao último nodo**
{% endhint %}

Un posible exemplo de funcionamento dunha cola sería o seguinte:

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

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

## Variantes de implementación

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

* **Cola Simple:** A estándar, onde se entra por un lado e se sae polo outro.
* **Cola Circular:** O último nodo apunta ao primeiro. Moi útil en arrays para non desperdiciar os ocos que quedan libres ao descolar elementos.
* **Cola de Prioridade:** Unha variante onde os elementos non saen só por orde de chegada, senón por importancia (ex: nunha urxencia hospitalaria, un paciente grave "salta" a cola).
* **Deques (Double-Ended Queues):** Colas especiais onde se pode inserir e extraer por ambos extremos.

<figure><img src="/files/5LX95njVfYA5RnnBvTd8" alt=""><figcaption></figcaption></figure>

## Exemplos de uso

As colas son unha boa solución sempre que os elementos requiran tratamento FIFO. Alguns exemplos de uso nos que se pode empregar a pila como ferramenta para resolver un problema son:

* **Planificación de procesos (Scheduling):** O Sistema Operativo utiliza colas para xestionar que programas deben usar a CPU. Se varios procesos queren executarse, o SO colócaos nunha cola de "Listos" e vai dándolles quenda
* **Xestión de impresión (Print Spooling):** Cando varias persoas envían documentos a unha mesma impresora compartida, estes colócanse nunha cola. A impresora procesa o primeiro que chegou e, mentres tanto, os demais agardan a súa quenda.
* **Xestión de peticións nun servidor web:** Cando varios usuarios acceden a unha páxina web ao mesmo tempo, as peticións poden organizarse nunha cola. O servidor atende primeiro a petición que chegou antes, garantindo un procesamento ordenado.
* **Xestión de eventos nunha interface gráfica (event loop):** Nunha aplicación con interface gráfica (como un navegador), as accións do usuario (clics, teclas, etc.) gárdanse nunha cola de eventos e van sendo procesadas en orde.


---

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