栈
栈(Stack)
栈是一种特殊的线性表,只能在一端进行操作
- 往栈中添加元素的操作,一般叫做push,入栈
- 从栈中移除元素的操作,一般叫做pop,出栈(只能移除栈顶元素,也叫做:弹出栈顶元素)
- 后进先出的原则,Last In First Out,LIFO
- 注意:这里说的 “栈” 与内存中的 “栈空间” 是两个不同的概念
栈(stack)接口设计
int size;//元素的数量
boolean isEmpty;//是否为空
void push(E element);//入栈
E pop();//出栈
E top();//获取栈顶元素
void clear();//清空
栈的内部实现可以直接利用 动态数组,链表 数据结构来实现
栈的实现
使用组合的方式实现,不直接继承动态数组(ArrayList)
/**
* 栈的实现 - 使用动态数组实现
* @param <E>
*/
public class Stack<E>{
// 使用 动态数组存储数组 初始化方法中创建列表
private ArrayList<E> list = new ArrayList<>();
//构造函数
public Stack() {
}
/**
* 元素的数量
* @return
*/
public int size(){
// 栈中元素数量, 就是列表中存储的元素数量
return list.size();
}
/**
* 是否为空
* @return
*/
public boolean isEmpty(){
// 栈是否空, 就是列表是否空
return list.isEmpty();
}
/**
* 清空栈元素
*/
public void clear(){
// 清空栈, 就是清空列表
list.clear();
}
/**
* 入栈
* @param element
*/
public void push(E element){
// 入栈, 将元素添加到列表的最后面
list.add(element);
}
/**
* 出栈
* @return
*/
public E pop(){
// 出栈, 将列表中最后一个元素删除并返回
return list.remove(list.size() - 1);
}
/**
* 获取栈顶元素
* @return
*/
public E top(){
// 查看栈顶元素, 就是查看列表中的最后一个元素
return list.get(list.size() - 1);
}
}
栈的应用
- 浏览器的前进和后退
- 软件的撤销(Undo),恢复(Redo)功能