📅  最后修改于: 2023-12-03 15:10:19.728000             🧑  作者: Mango
在编程中,堆栈(stack)是一种非常有用的数据结构,经常被用来解决各种问题。在本文中,我们将探讨堆栈的一些实际应用,并提供一些相关问题的解决方案。
堆栈是一种先进后出(Last In, First Out,LIFO)的数据结构,它允许在堆栈顶部进行插入和删除操作。具体来说,堆栈提供以下几种基本操作:
堆栈可以用于将一个数从一种进制转换为另一种进制。下面是一个将十进制数转换为二进制数的例子:
public static String decimalToBinary(int decimal) {
Stack<Integer> stack = new Stack<Integer>();
while (decimal > 0) {
int digit = decimal % 2;
stack.push(digit);
decimal /= 2;
}
StringBuilder binary = new StringBuilder();
while (!stack.isEmpty()) {
binary.append(stack.pop());
}
return binary.toString();
}
堆栈可以用于检查一个表达式中的括号是否匹配。下面是一个简单的实现:
public static boolean isBalanced(String expression) {
Stack<Character> stack = new Stack<Character>();
for (char c : expression.toCharArray()) {
if (c == '(' || c == '[' || c == '{') { // 如果是左括号,将其压入堆栈
stack.push(c);
} else if (c == ')' || c == ']' || c == '}') { // 如果是右括号
if (stack.isEmpty()) {
return false; // 如果堆栈为空,则括号不匹配
}
char left = stack.pop(); // 取出堆栈顶部的左括号
if (!isMatchingPair(left, c)) { // 如果左右括号不匹配,则括号不匹配
return false;
}
}
}
return stack.isEmpty(); // 如果堆栈为空,则表达式中的括号全部匹配
}
public static boolean isMatchingPair(char left, char right) {
return (left == '(' && right == ')') ||
(left == '[' && right == ']') ||
(left == '{' && right == '}');
}
在程序中,每当一个函数被调用时,系统都会为该函数创建一个新的堆栈帧(stack frame),帧中包含了函数的参数、局部变量和返回地址等信息。当函数执行完毕后,系统会将该堆栈帧从堆栈中弹出,恢复上一级函数的堆栈帧,继续执行上一级函数。
给定一个字符串(只包含字符“(”、“)”、“{”、“}”、“[”和“]”),编写一个函数来确定该字符串的括号是否正确匹配。
如果括号正确匹配,则返回true,否则返回false。
下面是该问题的一个解决方案:
public static boolean isBalanced(String expression) {
Stack<Character> stack = new Stack<Character>();
for (char c : expression.toCharArray()) {
if (c == '(' || c == '[' || c == '{') { // 如果是左括号,将其压入堆栈
stack.push(c);
} else if (c == ')' || c == ']' || c == '}') { // 如果是右括号
if (stack.isEmpty()) {
return false; // 如果堆栈为空,则括号不匹配
}
char left = stack.pop(); // 取出堆栈顶部的左括号
if (!isMatchingPair(left, c)) { // 如果左右括号不匹配,则括号不匹配
return false;
}
}
}
return stack.isEmpty(); // 如果堆栈为空,则表达式中的括号全部匹配
}
public static boolean isMatchingPair(char left, char right) {
return (left == '(' && right == ')') ||
(left == '[' && right == ']') ||
(left == '{' && right == '}');
}
堆栈是一种非常有用的数据结构,它通常用于解决许多实际问题。本文提供了一些堆栈的应用实例,并展示了如何使用堆栈来解决括号匹配问题。如果你还没有熟练掌握堆栈的基本概念和操作,请尝试自己实现一些例子,并且动手练习。