05-java实现栈

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();
    }
}

posted @ 2020-08-14 09:51  大眼侠  阅读(131)  评论(0编辑  收藏  举报