package dataStucture2.stack;

import dataStucture2.array.MyDynamicArray;

/**
 * 基于动态数组手写栈
 * 设计时,栈中仅栈顶对用户可见
 * @author 李腾
 *
 * @param <E>
 */
public class MyArrayStack<E> implements Stack<E> {
 

    MyDynamicArray<E> array;
    
    //有参构造 
    public MyArrayStack(int capacity) {
        array = new MyDynamicArray<>(capacity);
    }
    
    //无参构造
    public MyArrayStack() {
        array = new MyDynamicArray<>(); 
    }
    
    @Override
    //获取栈中元素个数
    public int getSize(){
        return array.getSize();
    }
    
    @Override
    //判断栈是否为空
    public boolean isEmpty(){
        return array.isEmpty();
    }

    //获取栈容量
    public int getCapacity(){
        return array.getCapacity();
    }
    
    /*
     * 基于动态数组的入栈和出栈:
     * last in first out 
     * 后入先出 ,压栈 addLast,出栈removeLast,后添加的先取出来
     * (non-Javadoc)
     * @see dataStucture2.stack.Stack#push(java.lang.Object)
     */
    
    @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("Stack: ");
        res.append("[");
        for(int i = 0 ; i < array.getSize() ; i++){
            res.append(i);
            if(i != array.getSize() -1){
                res.append(", ");
            }
        }
        //提醒用户那里是栈顶
        res.append("] top");
        return res.toString();
    }

}

 

栈的时间复杂度简单分析:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

补录:此处后来发现一个解释错误

入栈和出栈操作的时间复杂度之所以是O(1),并非是因为根据索引,而是因为addLast和removeLast是操作在数组末尾的元素,之后无需其他移动元素,所以是O(1)

 二 基于java动态数组手写栈 随笔

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄