05-java实现栈
本人git https://github.com/bigeyes-debug/Algorithm
一丶栈
- 栈是特殊的线性表,只能在一段操作
- 添加元素push,入栈
- 删除元素pop,出栈
- 动态数组和双向链表都可以实现
- 在栈顶进行操作
二丶栈的接口设计
public class Stack<E> {
// 使用动态数组实现栈
private List<E> list = new ArrayList<>();
// 元素的数量
public int size();
// 是否为空
public boolean isEmpty();
// 入栈
public void push(E element);
// 出栈
public E pop();
// 获取栈顶元素
public E top();
}
三丶栈的实现
- 我们在动态数组中实现了很多接口,动态数组和栈的结构类似,很多方法我们可以复用
- 我们采用组合的方式,将动态数组注入,
- 我们也可以采取继承的方式,但是继承会导致一些不需要的接口对外暴露,所以我们还是选择了组合的方式
- list.get().这个接口我们就没必要对外暴露
public class Stack<E> {
// 使用 动态数组存储数组
private ArrayList<E> list;
public Stack() {
// 初始化方法中创建列表
this.list = new ArrayList<>();
}
public int size() {
// 栈中元素数量, 就是列表中存储的元素数量
return list.size();
}
public boolean isEmpty() {
// 栈是否空, 就是列表是否空
return list.isEmpty();
}
public void push(E element) {
// 入栈, 将元素添加到列表的最后面
list.add(element);
}
public E pop() {
// 出栈, 将列表中最后一个元素删除并返回
return list.remove(list.size() - 1);
}
public E top() {
// 查看栈顶元素, 就是查看列表中的最后一个元素
return list.get(list.size() - 1);
}
public void clear() {
// 清空栈, 就是清空列表
list.clear();
}
}