
package dataStucture2.stack; import dataStucture2.array.MyDynamicArray; /** * 基于动态数组手写栈 * 设计时,栈中仅栈顶对用户可见 * * @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(); } }
栈的时间复杂度简单分析:
补录:此处后来发现一个解释错误
入栈和出栈操作的时间复杂度之所以是O(1),并非是因为根据索引,而是因为addLast和removeLast是操作在数组末尾的元素,之后无需其他移动元素,所以是O(1)