📅  最后修改于: 2023-12-03 15:06:55.818000             🧑  作者: Mango
当我们编写代码时,括号是非常重要的元素,如果括号不匹配,程序很可能会出现错误。堆栈数据结构是解决括号匹配问题的一种有效方法。在本文中,我们将介绍如何使用Java编写一个检查表达式中是否有平衡括号的程序。
堆栈是一种数据结构,它具有先进后出(Last-in-First-out,LIFO)的属性。 堆栈有两种基本操作:push(入栈) 和 pop(出栈)。元素只能从顶部出栈,新元素也只能从顶部入栈。
我们可以使用一个堆栈来检查表达式中的平衡括号。 遍历整个表达式,如果遇到左括号,则将其推入堆栈中。 如果遇到右括号,则从堆栈中取出元素并将其与当前右括号匹配。 如果两者匹配,则我们可以继续遍历表达式。 如果它们不匹配,则表达式中的括号不平衡。
下面是一个使用堆栈检查表达式中平衡括号的Java程序:
import java.util.Stack;
public class BalancedParenthesis {
public static boolean isBalanced(String exp) {
// 注意,此处使用了一个堆栈来存储左括号
Stack<Character> stack = new Stack<Character>();
// 遍历表达式的每个字符
for(int i = 0; i < exp.length(); i++) {
char ch = exp.charAt(i);
// 如果遇到左括号,则入栈
if(ch == '(' || ch == '[' || ch == '{') {
stack.push(ch);
}
// 如果遇到右括号,则出栈
else if(ch == ')' || ch == ']' || ch == '}') {
// 如果此时栈为空,或者栈顶元素与当前右括号不匹配,则表达式中的括号不平衡
if(stack.isEmpty() || !isMatchingPair(stack.pop(), ch)) {
return false;
}
}
}
// 如果堆栈为空,则表达式中的括号平衡
if(stack.isEmpty()) {
return true;
}
return false;
}
// 判断左右括号是否匹配的函数
public static boolean isMatchingPair(char left, char right) {
if(left == '(' && right == ')') {
return true;
} else if(left == '{' && right == '}') {
return true;
} else if(left == '[' && right == ']') {
return true;
}
return false;
}
public static void main(String[] args) {
String exp = "((a+b)*(c-d))";
if(isBalanced(exp)) {
System.out.println("表达式中的括号平衡");
} else {
System.out.println("表达式中的括号不平衡");
}
}
}
在上面的代码中,我们定义了一个 isBalanced
函数来检查表达式是否具有平衡的括号。此函数使用了一个堆栈来存储左括号,并遍历表达式中的每个字符来检查括号是否平衡。我们还定义了一个 isMatchingPair
函数来判断左右括号是否匹配。
在主函数中,我们使用一个示例表达式来测试 isBalanced
函数,并打印出结果。
在本文中,我们介绍了使用Java编写一个检查表达式中是否具有平衡括号的程序。我们使用了一个堆栈来存储左括号,并遍历表达式来检查括号是否平衡。我们还定义了一个辅助函数来判断左右括号是否匹配。