什么是栈
栈是一种用于存储数据的简单数据结构(与链表类似)。数据入栈的次序是栈的关键,可以把自助餐厅的
一堆盘子看做一个栈的例子,当盘子洗干净后,它们会添加到栈的顶端,当需要盘子时,也是从栈的顶端取
定义
栈(stack)是一个有序线性表,只能在表的一端(成为栈顶top)执行插入和删除操作,最后插入的元素
将第一个删除,所以,栈也称为后进先出的数据结构
栈的主要操作
! 按栈存储数据类型为整形为例
- int pop() 删除并返回最后一个插入栈的元素
- int size() 返回存储在栈中元素的个数
- boolean isEmpty() 判断栈中是否有元素
- void push(int data) 将data插入栈
- boolean isStackFull() 判断栈中是否满元素
异常
在栈抽象数据数据类型中,pop()操作和top()操作在栈空时候是不能执行的,试图对一个空栈执行pop()或者(top)操作会抛出异常,试图对一个满栈执行push操作也会抛出异常
应用场景示例
-符号匹配
- 中缀表达式转换为后缀表达式
- 计算后缀表达式
- 实现函数调用(递归)
- 网页浏览器中已访页面的历史记录(后退back即可)
- 文本编辑器中的撤销
- HTML和xml当中的标签匹配
基于简单数组的实现
public class ArrayStack {
private int top;
private int capacity;
private int[] array;
//初始化容量为1
public ArrayStack() {
capacity = 1;
array = new int[capacity];
top = -1;
}
//栈判空操作
public boolean isEmpty() {
return top == -1;
}
//栈满溢判断
public boolean isStackFull() {
return top == (capacity - 1);
}
//压栈
public void push(int data) {
if (isStackFull()) {
System.out.println("Stack over flow!");
} else {
array[top++] = data;
}
}
//出栈
public int pop() {
if (isEmpty()) {
System.out.println("Stack is empty!");
return 0;
} else {
return array[top--];
}
}
//初始化栈
public void deleteStack() {
top = -1;
}
}