• 【数据结构】栈


    什么是栈?

    栈是一种线性数据结构,相比于数组,栈对应的操作是数组的子集,只能从一端添加元素,也只能从一端取出元素,而这一端称为栈顶。

    存储方式如下:

    栈.png

    栈也是一种后进先出(Last In First Out,简称LIFO)的数据结构,最先进入的元素存放于栈低,后进入的元素存放于栈顶,并且在计算机的世界里,栈拥有着不可思议的作用。如:

    • 无处不在的撤销操作
    • 程序调用的系统栈

    栈的实现

    1、入栈

    入栈操作(push)就是把元素放入栈中,并且只允许从栈顶一侧放入新元素,新元素的位置将会成为栈顶。

    2、出栈

    出栈操作(pop)就是把栈顶元素从栈中弹出,出栈元素的前一个元素会重新成为新的栈顶。

    通过数组实现栈,整体代码如下:

    /**
     * 描述:栈所需要的方法
     * <p>
     * Create By ZhangBiao
     * 2020/5/9
     */
    public interface Stack<E> {
    
        /**
         * 入栈操作
         *
         * @param e
         */
        void push(E e);
    
        /**
         * 出栈操作
         *
         * @return
         */
        E pop();
    
        /**
         * 查看栈顶元素
         *
         * @return
         */
        E peek();
    
        /**
         * 获取栈元素个数
         *
         * @return
         */
        int getSize();
    
        /**
         * 判断栈是否为空
         *
         * @return
         */
        boolean isEmpty();
    
    }
    
    /**
     * 描述:基于动态数组实现栈。
     * <p>
     * Create By ZhangBiao
     * 2020/4/21
     */
    public class ArrayStack<E> implements Stack<E> {
    
        private Array<E> array;
    
        public ArrayStack() {
            this.array = new Array<>();
        }
    
        public ArrayStack(int capacity) {
            this.array = new Array<>(capacity);
        }
    
        @Override
        public void push(E e) {
            this.array.addLast(e);
        }
    
        @Override
        public E pop() {
            return this.array.removeLast();
        }
    
        @Override
        public E peek() {
            return this.array.getLast();
        }
    
        @Override
        public int getSize() {
            return this.array.getSize();
        }
    
        @Override
        public boolean isEmpty() {
            return this.array.isEmpty();
        }
    
        @Override
        public String toString() {
            StringBuilder result = new StringBuilder();
            result.append("Stack: ");
            result.append("[");
            for (int i = 0; i < array.getSize(); i++) {
                result.append(array.get(i));
                if (i != array.getSize() - 1) {
                    result.append(", ");
                }
            }
            result.append("] top");
            return result.toString();
        }
    }
    
  • 相关阅读:
    【小白学PyTorch】1 搭建一个超简单的网络
    【小白学PyTorch】2 浅谈训练集和测试集
    【小白学AI】GBDT梯度提升详解
    【小白学AI】XGBoost推导详解与牛顿法
    【小白写论文】技术性论文结构剖析
    小白学PyTorch 动态图与静态图的浅显理解
    【小白学推荐1】 协同过滤 零基础到入门
    【小白学AI】随机森林 全解 (从bagging到variance)
    OpenCV开发笔记(七十二):红胖子8分钟带你使用opencv+dnn+tensorFlow识别物体
    【python刷题】二叉搜索树-相关题目
  • 原文地址:https://www.cnblogs.com/zhangbiao97/p/12857286.html
Copyright © 2020-2023  润新知