数据结构(七)栈

来源:互联网 发布:大数据怎么做 编辑:程序博客网 时间:2024/05/16 17:49

  栈按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除的特殊线性表。进行删除和插入的一端称栈顶,另一端称栈底。插入一般称为进栈,删除则称为退栈。栈也称为后进先出表。

数组模拟实现堆栈

用数组模拟Stack实现部分方法。

    /**     * 数组实现堆栈     * @author Administrator     * @param <E>     */    public class MyStack<E> {        private E datas[];        private int index;//下标,记录数据个数        public MyStack(int size){            datas = (E[]) new Object[size];        }        public MyStack(){            this(10);        }        /**         * 栈是否为空         * @return true 不为空         *         false 为空         */        public boolean isEmpty(){            return index == 0;        }        /**         * 压栈         * @param data         */        public void push(E data){            datas[index] = data;//往数组中添加数据            index++;//索引自增        }        /**         *  移除堆栈顶部的对象,并返回该对象         * @return 堆栈顶部的对象         */        public E pop(){            if (isEmpty()) {                throw new EmptyStackException();            }            return datas[--index];        }    }

链表模拟实现堆栈

用双链表模拟Stack实现部分方法。

    /**     * 链表实现堆栈     * @author Administrator     * @param <E>     */    public class MyStackLink<E> {        //自定义链表,具体代码在数据结构(五)中        private MyDoubleLink<E> datas = new MyDoubleLink<>();        /**         * 栈是否为空         * @return true 不为空         *         false 为空         */        public boolean isEmpty(){            return datas.isEmpty();        }        /**         * 压栈         * @param data         */        public void push(E data){            datas.add(data);        }        /**         *  移除堆栈顶部的对象,并返回该对象         * @return 堆栈顶部的对象         */        public E pop(){            if (isEmpty()) {                throw new EmptyStackException();            }            //删除并返回链表dates尾部数据            return datas.removeRear();        }    }
0 0
原创粉丝点击