栈(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)功能

原文地址:https://www.cnblogs.com/netu/p/14999195.html