Java 括号匹配算法:栈实现与代码示例
① 采用栈的逻辑结构。因为括号匹配的问题可以用栈来解决,栈的特点是先进后出,可以方便地判断括号的匹配关系。
② 采用数组作为栈的物理结构。因为数组具有随机访问的特点,可以方便地进行入栈和出栈操作。
③ 解决该问题的思路、方法和流程:
- 创建一个数组作为栈,用于存放括号字符;
- 从键盘输入一个包含有花括号{}、中括号[]、小括号()的字符串;
- 遍历字符串中的每个字符:
- 如果是左括号(花括号、中括号、小括号),则将其入栈;
- 如果是右括号,判断栈是否为空,如果为空,则括号不匹配,输出错误结果;如果不为空,判断栈顶元素是否与当前右括号匹配,如果匹配,则将栈顶元素出栈;如果不匹配,则括号不匹配,输出错误结果;
- 遍历结束后,判断栈是否为空,如果为空,则括号匹配,输出正确结果;如果不为空,则括号不匹配,输出错误结果。
以下是Java代码实现:
import java.util.Scanner;
public class BracketMatching {
public static void main(String[] args) {
// 创建一个数组作为栈,用于存放括号字符
char[] stack = new char[100];
int top = -1; // 栈顶指针
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个包含有花括号{}、中括号[]、小括号()的字符串:");
String str = scanner.nextLine();
// 遍历字符串中的每个字符
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
// 如果是左括号,将其入栈
if (ch == '{' || ch == '[' || ch == '(') {
stack[++top] = ch;
}
// 如果是右括号
else if (ch == '}' || ch == ']' || ch == ')') {
// 判断栈是否为空
if (top == -1) {
System.out.println("括号不匹配");
return;
}
char topChar = stack[top];
// 判断栈顶元素与当前右括号是否匹配
if ((ch == '}' && topChar == '{')
|| (ch == ']' && topChar == '[')
|| (ch == ')' && topChar == '(')) {
top--; // 匹配成功,栈顶元素出栈
} else {
System.out.println("括号不匹配");
return;
}
}
}
// 判断栈是否为空
if (top == -1) {
System.out.println("括号匹配");
} else {
System.out.println("括号不匹配");
}
}
}
以上代码通过栈的逻辑结构和数组的物理结构,实现了判断括号是否正确匹配的功能。
原文地址: https://www.cveoy.top/t/topic/pvjF 著作权归作者所有。请勿转载和采集!