-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConversorInfijaAPrefija.java
More file actions
86 lines (71 loc) · 2.91 KB
/
Copy pathConversorInfijaAPrefija.java
File metadata and controls
86 lines (71 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import java.util.Stack;
public class ConversorInfijaAPrefija {
// Método para convertir una expresión infija a prefija
public static String convertirInfijaAPrefija(String exp) {
// Paso 1: Invertir la expresión
String expInvertida = invertirExpresion(exp);
// Paso 2: Sustituir los paréntesis
expInvertida = sustituirParentesis(expInvertida);
// Paso 3: Convertir la expresión invertida a posfija
String posfija = convertirInfijaAPosfija(expInvertida);
// Paso 4: Invertir la expresión posfija para obtener la prefija
return new StringBuilder(posfija).reverse().toString();
}
// Método para invertir la expresión
public static String invertirExpresion(String exp) {
StringBuilder sb = new StringBuilder(exp);
return sb.reverse().toString();
}
// Método para sustituir los paréntesis
public static String sustituirParentesis(String exp) {
return exp.replace('(', '↑').replace(')', '(').replace('↑', ')');
}
// Método para convertir infija a posfija (como en el ejemplo anterior)
public static String convertirInfijaAPosfija(String exp) {
Stack<Character> pila = new Stack<>();
StringBuilder resultado = new StringBuilder();
for (int i = 0; i < exp.length(); i++) {
char token = exp.charAt(i);
if (Character.isLetterOrDigit(token)) {
resultado.append(token);
} else if (token == '(') {
pila.push(token);
} else if (token == ')') {
while (!pila.isEmpty() && pila.peek() != '(') {
resultado.append(pila.pop());
}
pila.pop();
} else if (esOperador(token)) {
while (!pila.isEmpty() && prioridad(pila.peek()) >= prioridad(token)) {
resultado.append(pila.pop());
}
pila.push(token);
}
}
while (!pila.isEmpty()) {
resultado.append(pila.pop());
}
return resultado.toString();
}
// Método para verificar si el token es un operador
public static boolean esOperador(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
// Método para obtener la prioridad de los operadores
public static int prioridad(char c) {
if (c == '+' || c == '-') {
return 1;
} else if (c == '*' || c == '/') {
return 2;
} else {
return -1; // No es un operador
}
}
// Método principal para probar la conversión
public static void main(String[] args) {
String expresionInfija = "3+(2*5)";
String expresionPrefija = convertirInfijaAPrefija(expresionInfija);
System.out.println("Expresión infija: " + expresionInfija);
System.out.println("Expresión prefija: " + expresionPrefija);
}
}