返回
栈的数据结构及算法
前端
2023-10-20 03:01:51
栈概述
栈是一种数据结构,它遵循后入先出(FILO)的原则,也就是说,后放进去的东西会先拿出来。栈可以被看作是一个杯子,我们往杯子里放东西,先放进去的东西会在最下面,后放进去的东西会在最上面。当我们从杯子里拿东西的时候,我们会先拿到最上面的东西,然后是下面的东西,以此类推。
栈在计算机科学中有很多应用,比如:
- 存储函数调用时的局部变量。当一个函数被调用时,它的局部变量会被压入栈中。当函数返回时,它的局部变量会被弹出栈。
- 实现递归算法。递归算法是一种函数调用自身的方法。当一个函数调用自身时,它的参数会被压入栈中。当函数返回时,它的参数会被弹出栈。
- 实现表达式求值。表达式求值器使用栈来存储操作数和运算符。当一个操作数被遇到时,它会被压入栈中。当一个运算符被遇到时,它会被弹出栈,并与栈顶的两个操作数进行运算。运算结果会被压入栈中。
栈的数据结构
栈可以由数组或链表来实现。数组实现的栈被称为顺序栈,链表实现的栈被称为链式栈。
顺序栈的优点是访问速度快,缺点是空间利用率不高。链式栈的优点是空间利用率高,缺点是访问速度慢。
栈的算法
栈有以下几种基本操作:
- 压栈(push):将一个元素压入栈中。
- 出栈(pop):将栈顶的元素弹出栈。
- 取栈顶元素(top):获取栈顶的元素,但不弹出栈。
- 判断栈是否为空(isEmpty):判断栈是否为空。
栈的应用
栈在计算机科学中有很多应用,比如:
- 存储函数调用时的局部变量。
- 实现递归算法。
- 实现表达式求值。
- 括号匹配。
- 迷宫求解。
- 编译器。
栈的示例代码
以下是用Java实现的栈的示例代码:
public class Stack {
private int[] arr;
private int top;
public Stack(int size) {
arr = new int[size];
top = -1;
}
public void push(int value) {
if (top == arr.length - 1) {
System.out.println("Stack is full");
} else {
arr[++top] = value;
}
}
public int pop() {
if (top == -1) {
System.out.println("Stack is empty");
return -1;
} else {
return arr[top--];
}
}
public int peek() {
if (top == -1) {
System.out.println("Stack is empty");
return -1;
} else {
return arr[top];
}
}
public boolean isEmpty() {
return top == -1;
}
public static void main(String[] args) {
Stack stack = new Stack(5);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
while (!stack.isEmpty()) {
System.out.println(stack.pop());
}
}
}
结论
栈是一种遵循后入先出(FILO)原则的数据结构,它在计算机科学中有很多应用。栈可以由数组或链表来实现,数组实现的栈被称为顺序栈,链表实现的栈被称为链式栈。栈有以下几种基本操作:压栈、出栈、取栈顶元素、判断栈是否为空。