The problem is that you are doing wrong inclusion of the elements in the expression. you are including the operators indiscriminately in the piles, when there are conditions:
The first thing we need to know is that the operators have associated priorities that are used for their administration, basically this is the priority of the operators:
Operador | Prioridad dentro de la pila | prioridad fuera de la pila
^ (potencia) | 3 | 4
*,/ | 2 | 2
+,- | 1 | 1
( | 0 | 5
Now keeping this in mind the algorithm comes next: I will try to explain it step by step.
1. mientras queden elementos en la expresión infija leer elemento y
hacer del paso 2 al 4:
2.si elemento es un operando va directo a la expresión.
3.si no, (el elemento es un caracter) entonces:
3.1 si la pila de ayuda está vacía almaceno el caracter y
vuelvo a (1)
3.2 si la pila no está vacía entonces
(aquí hay dos opciones)
3.2.1 si la prioridad del operador es mayor que la prioridad
del elemento en la sima de la pila, se almacena en la
la pila y se vuelve a (1)
3.2.1 si la prioridad es menor entonces saco el elemento de
la pila y lo envío a la expresión, y almaceno en la pila
el carácter leído.
4. si es paréntesis derecho (observar que el derecho no se encuentra en
los operadores ) entonces:
4.1 saco elementos de la pila de operadores hasta encontrar el
paréntesis izquierdo, y todos los elementos extraídos van a la
expresión potsfija en el orden que fueron obtenidos.
4.2 continuar a partir de 1.
5. en este punto ya no hay mas elementos en la expresión infija.
6. si quedan operadores en la pila sacar todos e incluirlos en la
expresión potsfija.
and ready. that serial algorithm, you just have to create in your code the logic to validate the priority of each operator.