> 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/exercicios-java/ud6-exercicios/pilas.md).

# Pilas

1. Implementa unha clase Pila sen empregar clases da familia de collections. Emprega clases xenéricas na túa implementación. Para isto:
   1. Reutiliza a clase Nodo que definiches no exercicio 2 de listas
   2. Define unha clase Pila que vai a traballar con elementos xenéricos. A lista consta de un atributo nodoCima e outro atributo tamaño, que determina o número de elementos da pila.&#x20;
      1. Implementa un **constructor vacío**, que crea unha lista con un nodo cima nulo e o tamano de 0.
      2. Implementa un método **push(ElementoXenerico e),** que engada un elemento a un nodo como cima da pila.&#x20;
      3. Implementa un método **pop()**, que devolve e elimina da pila o elemento cima.
      4. Implementa un método **peek()**, que devolve sen eliminar da pila o elemento cima.
      5. Implementa un método **size()**, que devolve o tamano
      6. Implementa un método **isEmpty()**, que devolve true se a cima e nula
   3. Implementa unha clase App na que realices a proba de que a Pila funciona correctamente
2. Implementa unha interface Java Swing que simule un "Navegador" no que se pode xestionar o historial. Para isto:

   1. Crea unha clase Navegador que sexa a ventana principal
   2. Divida a venta principal en tres paneles: Superior, inferior e centrar, empregando o Layout por defecto
   3. O panel superior debe de conter unha etiqueta que conteña a palabra URL: e unha caixa de texto na que se poidan escribir as webs. Emprega un Layout que permita colocar en liña os compoñentes
   4. O panel central debe conter dúas etiquetas de texto: unha na que se almacene a paxina actual (webActual) e outra que mostre o estado do historial (pilaHistorial) en cada momento. Emprega un layout que permita colocar os compoñentes en diferentes filas&#x20;
   5. O panel inferior debe de conter dous botóns. Un denominado "Visitar" e outro denominado "Atras". Emprega un layout que permita colocar compoñentes en liña

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

   1. Crea unha clase Controlador que vai a traballar con un Navegador e con unha Pila de históricos. O controlador debe de xestionar os seguintes eventos:
      1. Ao pulsar o botón "Visitar", se a caixa de texto da URL non esta vacía, hai que engadir a URL na pila, establécela como webActual, actualizar o contido de pilaHistorial e vaciar a caixa de texto
      2. Ao pulsar o botón "Atras", se a pila non esta vacía, elimina e recupera o elemento cima. Actualiza o navegador coa web cima recuperada e co estado da pila de históricos
   2. Crea unha clase App na que instancies unha Pila, un Navegador e un Controlador.


---

# 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/exercicios-java/ud6-exercicios/pilas.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.
