package basic.dataStructure.stack;
/**
* 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素
* finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值
* @author liuxin
*
*/
public class QuickMinStack {
private int defaultSize = 10;
private int extendSize = 10;
Object[] elements = new Object[defaultSize];
private int min = -1;
private int size = 0;
public QuickMinStack(){}
public boolean isEmpty(){
boolean flag = false;
for(int i = 0; i < elements.length; i++){
if(elements[i] != null){
return false;
}
flag = elements == null;
}
return flag;
}
public void push(int data){
if(isEmpty()){
this.min = data;
}else{
this.min = data < min ? data : min;
}
size ++;
elements[size - 1] = data;
if(size >= elements.length){
extend();
}
}
public int pop(){
Integer d = (Integer)elements[size - 1];
elements[size - 1] = null;
size--;
return d;
}
public int findMin(){
return this.min;
}
public int size(){
return this.size;
}
private void extend(){
int curSize = elements.length;
Object[] arr = new Object[curSize + extendSize];
System.arraycopy(elements, 0, arr, 0, curSize);
this.elements = arr;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
for(int i = size - 1; i >= 0; i--){
sb.append(elements[i]);
if(i > 0){
sb.append(",");
}else{
sb.append("]");
}
}
return sb.toString();
}
}