栈(Stack)是一种具有特定限制的数据结构,它遵循先进后出(Last-In-First-Out,LIFO)的原则。这意味着最后一个添加到栈中的元素将首先被移除。
栈有两个基本操作:
- 入栈(Push):将元素添加到栈的顶部。
- 出栈(Pop):从栈的顶部移除并返回元素。
除了入栈和出栈之外,还有其他一些常见的操作,如查看栈顶元素(Peek)和检查栈是否为空(IsEmpty)等。 在编程中,可以使用数组或链表来实现栈。下面是一个使用数组实现栈的示例代码:
public class Stack {
private int maxSize;
private int top;
private int[] stackArray;
public Stack(int size) {
maxSize = size;
stackArray = new int[maxSize];
top = -1;
}
public void push(int value) {
if (top == maxSize - 1) {
System.out.println("Stack is full. Cannot push element.");
return;
}
stackArray[++top] = value;
}
public int pop() {
if (top == -1) {
System.out.println("Stack is empty. Cannot pop element.");
return -1;
}
return stackArray[top--];
}
public int peek() {
if (top == -1) {
System.out.println("Stack is empty. No elements to peek.");
return -1;
}
return stackArray[top];
}
public boolean isEmpty() {
return (top == -1);
}
}
在上面的示例代码中,我们使用一个数组stackArray
来存储栈的元素。maxSize
表示栈的最大容量,top
表示栈顶的索引。你可以按照以下方式使用这个栈:
Stack stack = new Stack(5);
stack.push(10); // 入栈操作
stack.push(20);
stack.push(30);
System.out.println(stack.peek()); // 查看栈顶元素
System.out.println(stack.pop()); // 出栈操作
System.out.println(stack.isEmpty()); // 检查栈是否为空
输出结果将会是:
30
30
false
Stack 的作用
Stack(栈)是一种常见的数据结构,它遵循先进后出(LIFO)的原则。栈可以用来存储和管理数据项,并提供了一些基本操作,如压入(push)和弹出(pop)。
栈在许多计算机科学领域都有广泛的应用,包括编程语言解析、函数调用和返回、递归算法等。下面是一些栈的常见应用场景:
- 函数调用和返回:当一个函数被调用时,当前函数的状态(例如局部变量、返回地址等)会被保存到栈中。当函数执行完毕后,它的状态会从栈中弹出,程序继续执行调用该函数的位置。
- 表达式求值:在编写计算器或表达式求值程序时,可以使用栈来实现运算符优先级的处理。通过将运算符和操作数依次压入栈中,然后按照优先级进行弹出和计算,最终得到表达式的结果。
- 括号匹配检查:栈也可以用于检查括号是否匹配。当遇到左括号时,将其压入栈中;当遇到右括号时,将栈顶元素弹出并检查是否与当前括号匹配。如果不匹配,则括号不正确。
- 浏览器的前进和后退功能:浏览器中的前进和后退按钮可以使用栈来实现。每当用户导航到一个新页面时,该页面的URL会被压入栈中。当用户点击后退按钮时,最近访问的URL将从栈中弹出,以便返回上一个页面。
下面是一个使用数组实现栈的示例代码:
class Stack {
private int maxSize;
private int top;
private int[] stackArray;
public Stack(int size) {
maxSize = size;
stackArray = new int[maxSize];
top = -1;
}
public void push(int value) {
if (top < maxSize - 1) {
stackArray[++top] = value;
} else {
System.out.println("Stack is full!");
}
}
public int pop() {
if (top >= 0) {
return stackArray[top--];
} else {
System.out.println("Stack is empty!");
return -1;
}
}
public int peek() {
if (top >= 0) {
return stackArray[top];
} else {
System.out.println("Stack is empty!");
return -1;
}
}
public boolean isEmpty() {
return (top == -1);
}
public boolean isFull() {
return (top == maxSize - 1);
}
}
// 示例用法:
Stack stack = new Stack(5);
stack.push(10);
stack.push(20);
stack.push(30);
System.out.println(stack.pop()); // 输出:30
System.out.println(stack.peek()); // 输出:20
System.out.println(stack.isEmpty()); // 输出:false
System.out.println(stack.isFull()); // 输出:false