📌  相关文章
📜  使用堆栈检查表达式(格式良好)中的平衡括号的Java程序(1)

📅  最后修改于: 2023-12-03 15:06:55.818000             🧑  作者: Mango

使用堆栈检查表达式(格式良好)中的平衡括号的Java程序

当我们编写代码时,括号是非常重要的元素,如果括号不匹配,程序很可能会出现错误。堆栈数据结构是解决括号匹配问题的一种有效方法。在本文中,我们将介绍如何使用Java编写一个检查表达式中是否有平衡括号的程序。

什么是堆栈?

堆栈是一种数据结构,它具有先进后出(Last-in-First-out,LIFO)的属性。 堆栈有两种基本操作:push(入栈) 和 pop(出栈)。元素只能从顶部出栈,新元素也只能从顶部入栈。

算法

我们可以使用一个堆栈来检查表达式中的平衡括号。 遍历整个表达式,如果遇到左括号,则将其推入堆栈中。 如果遇到右括号,则从堆栈中取出元素并将其与当前右括号匹配。 如果两者匹配,则我们可以继续遍历表达式。 如果它们不匹配,则表达式中的括号不平衡。

Java程序

下面是一个使用堆栈检查表达式中平衡括号的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编写一个检查表达式中是否具有平衡括号的程序。我们使用了一个堆栈来存储左括号,并遍历表达式来检查括号是否平衡。我们还定义了一个辅助函数来判断左右括号是否匹配。