package stack;
public class ArrayStack<E> implements Stack<E>{
int pointer = 0;
private E[] stackData;
public ArrayStack(){
this(11);
}
public ArrayStack(int initialCapacity){
stackData = (E[]) new Object[initialCapacity];
}
public boolean empty() {
if( pointer == 0){
return true;
}else{
return false;
}
}
public E peek() {
if(empty()){
throw new EmptyStackException();
}
return (E) stackData[pointer - 1];
}
public void push(E item) {
ensureCapacity();
stackData[pointer++] = item;
}
public E pop() {
E currentItem = peek();
stackData[--pointer] = null;
return currentItem;
}
public int search(E item) {
for (int i = pointer - 1; i >= 0; i--){
if(stackData[i] == item){
return pointer - i;
}
}
return -1;
}
private void ensureCapacity(){
if (pointer > stackData.length - 1){
Object[] oldData = stackData;
stackData = (E[]) new Object[oldData.length * 2];
System.arraycopy(oldData, 0, stackData, 0, oldData.length);
}
}
}