美文网首页程序员数据结构
数据结构(三)用两种方式简单实现栈

数据结构(三)用两种方式简单实现栈

作者: Merlin_720 | 来源:发表于2019-08-17 17:45 被阅读0次

    数据结构(一)数组实现一个简单的ArrayList
    数据结构(二)链表实现LinkedList
    数据结构(三)用两种方式简单实现栈
    数据结构(四)栈和队列的简单应用
    数据结构(五)用两种方式简单实现队列
    数据结构(六)BST二分搜索树(上)
    数据结构(六)BST二分搜索树(下)
    数据结构(七)两种方式实现set
    数据结构(八)两种方式实现map
    数据结构(九)set解决LeetCode349号问题

    栈这个数据结构很奇特,像是一水桶,先进来的最后才能出去。但是他的用处很广。我们来简单的实现一个自己的栈。话不多说,下边是源码。

    先贴一下栈的几个简单的方法

    public interface Stack<E> {
    
        int size();
        boolean isEmpty();
        //进栈
        void push(E e);
        //出栈
        E pop();
        //获取栈顶元素
        E peek();
    }
    
    

    下边用两种方式实现栈

    • 第一种是之前咱们自己实现的arraylist
    public class ArrayStack<E> implements Stack<E> {
    
        Array<E> array;
    
        public ArrayStack(int capacity){
            array = new Array<>(capacity);
        }
        public ArrayStack(){
            array = new Array<>();
        }
    
        @Override
        public int size() {
            return array.getSize();
        }
    
        @Override
        public boolean isEmpty() {
            return array.isEmpty();
        }
    
        public int getCatacity(){
            return array.getCapacity();
        }
    
        @Override
        public void push(E e) {
            array.addLast(e);
        }
    
        @Override
        public E pop() {
            return array.removeLast();
        }
    
        @Override
        public E peek() {
            return array.getLast();
        }
    
        @Override
        public String toString(){
            StringBuilder res = new StringBuilder();
            res.append("[");
            for (int i = 0; i<array.getSize() ; i ++){
                res.append(array.get(i));
                if (i != array.getSize() - 1){
                    res.append(",");
                }
            }
            res.append("]  top");
            return res.toString();
        }
    }
    

    这里的源码其实很简单,因为大部分工作在之前的ArrayList里已经实现的了
    -下边是第二中实现方法是用链表实现的。

    /**
     * 链表栈
     * @param <E>
     */
    public class LinkedListStack<E> implements Stack<E> {
    
        private DummyLinkedList<E> linkedList;
    
        public LinkedListStack() {
            linkedList = new DummyLinkedList<>();
        }
    
        @Override
        public int size() {
            return linkedList.getSize();
        }
    
        @Override
        public boolean isEmpty() {
            return linkedList.isEmpty();
        }
    
        @Override
        public void push(E e) {
            linkedList.addFirst(e);
        }
    
        @Override
        public E pop() {
            return linkedList.removeFirst();
        }
    
        @Override
        public E peek() {
            return linkedList.getFirst();
        }
    
        @Override
        public String toString() {
            StringBuilder res = new StringBuilder();
            res.append("Stack : Top");
            res.append(linkedList);
            return res.toString();
        }
    
      
    }
    

    这里也很简单。大部分工作也是之前的LinkedList实现了。

    • 下边会出一个栈的应用的文章,希望大家多多关注支持。

    相关文章

      网友评论

        本文标题:数据结构(三)用两种方式简单实现栈

        本文链接:https://www.haomeiwen.com/subject/zweksctx.html