zoukankan      html  css  js  c++  java
  • 【数据结构】栈

    什么是栈?

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

    存储方式如下:

    栈.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();
        }
    }
    
  • 相关阅读:
    广播和多播
    nohup和&后台运行,进程查看及终止
    Java知识汇总——思维导图
    linux 基础命令使用
    scp命令详解
    linux 安装crontab执行定时任务
    linux磁盘挂载
    虚拟机安装网络设置
    Android直播实现srs流媒体服务器部署
    java的(PO,VO,TO,BO,DAO,POJO)解释
  • 原文地址:https://www.cnblogs.com/zhangbiao97/p/12857286.html
Copyright © 2011-2022 走看看