> 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-deque-e-arraydeque.md).

# Pilas: Deque e ArrayDeque

Unha expresión postfija (ou notación polaca inversa) é unha maneira de escribir operacións matemáticas onde o operador se coloca despois dos operandos :&#x20;

```
2 3 + //Postfija
2 + 3 //Infija
```

Esta notación postfija é empregada por calculadoras ou compiladores para realizar as operacións  matemáticas na orde adecuada.&#x20;

1. Implementa unha clase **Compilador** con un método **convertirPostfija(String expresion)**, que vai a recibir unha expresión matemática infija e a vai a converter a postfija. A case vai a contar con seguinte:
   1. Unha **Pila de operadores**, que se emprega para gardar tempralmente operadores e parenteses mentres agardan o seu turno
   2. A **Cola de resultados**, que se emprega para ir almacenando o resultado final
   3. Implementa un método **esOperador(String s)** que devolve certo se o que recibe como parámetro é "+", "-", "\*" ou "/"
   4. Implementa un método **toString()** que mostre en cada caso que elementos conten a cola e a pila do compilador
   5. Implementa un método **limpiar(),** que vacie totalmente o contido da pila e da cola do compilador
   6. Asume que na expresion, todos os caracteres son correctos (**non xestiones erros**), e asume que todos os caracteres estan separados por un espacio, para que poidas empregar **expresion.split(" ").**
   7. O algoritmo para a conversión será o seguinte:
      1. Se procesas un número, vai directo á cola de resultados
      2. Se procesas un operador:
         1. Se hai un operador na pila con maior ou igual precedencia que o actual, sacao da pila  e meteo na cola
            1. Implementa un método **precedencia(String op),** que devolva 1 se a operación é suma ou resta, e que devolva 2 se a operación e multiplicación ou division.
         2. Mete o operador actual na pila.
      3. Se recibes unha parentese de apetura, metea na pila&#x20;
      4. Se recibes unha parentes de peche:
         1. Desencola o que haxa na Pila ata que atopes un parentese de apertura
         2. As parenteses de apertura e peche non van na cola
      5. Se non hai mais elementos para procesar, desapila os elementos da pila de operadores e engadeos na cola

<pre><code><strong>Exemplos:
</strong><strong>2 + 3 => 2 3 + 
</strong><strong>2 + 3 * 5 => 2 3 5 * +
</strong><strong>(2 + 3) * 5 => 2 3 + 5 *
</strong><strong>(2 + 3) * (4 - 5) ==> 2 3 + 4 5 - * 
</strong></code></pre>

```java
//Podes empregar o seguinte código para realizar as probas na App
package EstructurasDeDatos.Pilas.Compilador;
public class App {
    public static void main(String[] args) {
        Compilador compilador = new Compilador();
        //Compilador
        compilador.evaluarPostfija("3 + 4");
        System.out.println("Compilador: " + compilador);
        compilador.limpiar();
        //
        compilador.evaluarPostfija("2 + 3 * 5");
        System.out.println("Compilador: " + compilador);
        compilador.limpiar();
        //
        compilador.evaluarPostfija("( 2 + 3 ) * 5");
        System.out.println("Compilador: " + compilador);
        compilador.limpiar();
        //
        compilador.evaluarPostfija("( 2 + 3 ) * ( 4 - 5 )");
        System.out.println("Compilador: " + compilador);
        compilador.limpiar();
    }
}
```

2. Implementa os seguintes cambios na clase Compilador:
   1. Inclue un atributo pilaEvaluación, que vai a permitir almacenar o resultado de evaluación da cola que conten a expresion postfija.
   2. Implementa un método **operar(String operador, int num1, int num2)**, que resolve operacions de suma, resta, multiplicacion e división. num1 é o primeiro número da expresión, e num2 é o segundo numero da expresión.
   3. Implementa un método denominado **evaluarPostFija()**, que vai a realizar o seguinte:
      1. Recupera o elemento da cola de esquerda a dereita
      2. Se o elemento é un número, engadeo na pila
      3. Se o elemento e un operador:&#x20;

         1. Desapila o primeiro numero como num2
         2. Desapila o segundo elemento como num1
         3. Chama a operar coa operación
         4. Almacena o resultado na pila

         Ao rematar, o resultado almacenado na pila será o resultado final. Imprimeo por pantalla
   4. Modifica a clase App anterior para chamar a evaluarPostFija dos exemplos indicados e verificar que funciona.

```
(2 + 3) * (4 - 5) => 2 3 + 4 5 - * 
Exemplo de avaliación da expresion postfija
2 3 + 4 5 - * => 5 4 5 - * => 5 -1 * => -5
```


---

# 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-deque-e-arraydeque.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.
