栈:顺序栈

顺序栈即栈的底层是通过数组实现的,这里用到的数组是之前所实现的动态数组https://www.jianshu.com/p/e8bb88bb0b78

时间复杂度:
入栈:O(1)
出栈:O(1)

接口类:

public interface Stack<E> {

    int getSize();
    boolean isEmpty();
    void push(E e);
    E pop();
    E peek();

}

实现类:

public class ArrayStack<E> implements Stack<E> {

    Array<E> array = new Array<>();


    @Override
    public int getSize() {
        return array.getSize();
    }

    @Override
    public boolean isEmpty() {
        return array.isEmpty();
    }

    @Override
    public void push(E e) {
       array.addLast(e);
    }

    @Override
    public E pop() {
        return array.removeLast();
    }

    @Override
    public E peek() {
        return array.get(getSize()-1);
    }

    @Override
    public String toString() {

//        StringBuilder res = new StringBuilder();
//
//        for (int i = 0 ; i < array.getSize() ; i++){
//            if (i < array.getSize()-1)
//            res.append(array.get(i)+"->");
//            else res.append(array.get(i));
//        }
//        return res.toString();

        StringBuilder res = new StringBuilder();
        res.append(String.format("Stack: size=%d , capacity = %d\n",array.getSize() ,array.getCapacity()));
        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();
    }
}

其中的Array 是之前所实现的动态数组

测试:

public class Main {

    public static void main(String[] args) {
       ArrayStack<Integer> arrayStack = new ArrayStack<>();

       for (int i = 0 ; i < 5 ; i ++){
           arrayStack.push(i);
           System.out.println(arrayStack);
       }

       for (int i = 0 ; i < 5; i++){
           arrayStack.pop();
           System.out.println(arrayStack);
       }
       

    }
}
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容