private static IList<string> convertir(IList<string> infija, string aux) { bool neg = false, key = true, valor = false; IList<string> postfija = new List<string>(); Pila pila = new Pila(100); int cont = -1; foreach (string letra in infija) { cont++; if (aux[0] == '-' && key) { neg = true; key = false; } if (cont == 1 && letra.Equals("-")) { neg = true; continue; } if (!pila.estaVacia() && (pila.elementoTope().Equals("/") || pila.elementoTope().Equals("*")) && letra.Equals("-") && valor == false) { neg = true; } else if (esOperador(letra)) { if (letra.Equals("*") || letra.Equals("/")) { valor = false; } if (pila.estaVacia()) { pila.apilar(letra); } else if (letra.Equals("(")) { pila.apilar(letra); } else if (pila.elementoTope().Equals("(") && !letra.Equals(")")) { pila.apilar(letra); } else if (letra.Equals(")")) { while (!pila.elementoTope().Equals("(")) { postfija.Add((string)pila.desapilar()); } pila.desapilar(); //termina desapilando el "(";, según el algoritmo } else { int pe = prioridadEnExpresion(letra); //prioridad en la expresion int pp = prioridadEnPila((string)pila.elementoTope()); //prioridad en la pila if (pe > pp) { pila.apilar(letra); } else { while (true) { postfija.Add((string)pila.desapilar()); if (pila.estaVacia()) { pila.apilar(letra); break; } if (pila.elementoTope().Equals("(")) { pila.apilar(letra); break; } if (pe > pp) { pila.apilar(letra); break; } pp = prioridadEnPila((string)pila.elementoTope()); } } } } else { if (neg) { string temp = "-" + letra; //letra = "-" + letra; postfija.Add(temp); } else { postfija.Add(letra); } neg = false; valor = true; } } while (!pila.estaVacia() && !pila.elementoTope().Equals("(")) { postfija.Add((string)pila.desapilar()); } return postfija; }