您好,登录后才能下订单哦!
栈(Stack)是计算机科学中一种常见的数据结构,它遵循后进先出(LIFO, Last In First Out)的原则。在Java中,栈可以通过多种方式实现,包括使用Java集合框架中的Stack
类或Deque
接口。本文将详细介绍Java栈的相关知识点。
栈是一种线性数据结构,具有以下特点:
在Java中,栈可以通过以下几种方式实现:
Stack
类Stack
类是Java集合框架中的一个类,继承自Vector
类。它提供了栈的基本操作。
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
// 压栈
stack.push(1);
stack.push(2);
stack.push(3);
// 弹栈
System.out.println(stack.pop()); // 输出 3
// 查看栈顶元素
System.out.println(stack.peek()); // 输出 2
// 判断栈是否为空
System.out.println(stack.isEmpty()); // 输出 false
// 获取栈的大小
System.out.println(stack.size()); // 输出 2
}
}
Deque
接口Deque
(双端队列)接口也可以用来实现栈。ArrayDeque
是Deque
接口的一个常用实现类,它比Stack
类更高效。
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeStackExample {
public static void main(String[] args) {
Deque<Integer> stack = new ArrayDeque<>();
// 压栈
stack.push(1);
stack.push(2);
stack.push(3);
// 弹栈
System.out.println(stack.pop()); // 输出 3
// 查看栈顶元素
System.out.println(stack.peek()); // 输出 2
// 判断栈是否为空
System.out.println(stack.isEmpty()); // 输出 false
// 获取栈的大小
System.out.println(stack.size()); // 输出 2
}
}
栈在计算机科学中有广泛的应用,以下是一些常见的应用场景:
在程序执行过程中,函数调用的顺序是通过栈来管理的。每次调用一个函数时,系统会将函数的返回地址、局部变量等信息压入栈中,函数执行完毕后,再从栈中弹出这些信息,返回到调用点。
栈可以用于解析和计算表达式,如中缀表达式转后缀表达式、后缀表达式求值等。
import java.util.Stack;
public class ExpressionEvaluation {
public static int evaluatePostfix(String expression) {
Stack<Integer> stack = new Stack<>();
for (char c : expression.toCharArray()) {
if (Character.isDigit(c)) {
stack.push(c - '0');
} else {
int operand2 = stack.pop();
int operand1 = stack.pop();
switch (c) {
case '+':
stack.push(operand1 + operand2);
break;
case '-':
stack.push(operand1 - operand2);
break;
case '*':
stack.push(operand1 * operand2);
break;
case '/':
stack.push(operand1 / operand2);
break;
}
}
}
return stack.pop();
}
public static void main(String[] args) {
String expression = "231*+9-";
System.out.println("Postfix Evaluation: " + evaluatePostfix(expression)); // 输出 -4
}
}
栈可以用于检查表达式中的括号是否匹配。
import java.util.Stack;
public class BracketMatching {
public static boolean isBalanced(String expression) {
Stack<Character> stack = new Stack<>();
for (char c : expression.toCharArray()) {
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if (!isMatchingPair(top, c)) {
return false;
}
}
}
return stack.isEmpty();
}
private static boolean isMatchingPair(char opening, char closing) {
return (opening == '(' && closing == ')') ||
(opening == '[' && closing == ']') ||
(opening == '{' && closing == '}');
}
public static void main(String[] args) {
String expression = "{[()()]}";
System.out.println("Is Balanced: " + isBalanced(expression)); // 输出 true
}
}
浏览器的前进和后退功能可以通过两个栈来实现。一个栈用于存储访问过的页面,另一个栈用于存储后退时弹出的页面。
push
、pop
、peek
、isEmpty
、size
操作的时间复杂度均为O(1)。栈是一种非常重要的数据结构,广泛应用于各种场景中。在Java中,可以通过Stack
类或Deque
接口来实现栈。理解栈的基本概念、操作和应用场景,对于编写高效、可靠的程序至关重要。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。