线性表(数组)实现栈-Java
package MyStack;
public class MyStackArray<AnyType> {
public static final int DEFAULT_CAPACITY = 10;
private int theSize;
private AnyType[] theItem;
public MyStackArray() {
doClear();
}
public int size() {
return theSize+1;
}
private void doClear() {
theSize = -1;
ensureCapacity(DEFAULT_CAPACITY);
}
public boolean isEmpty() {
return size() == 0;
}
public void ensureCapacity(int newCapacity) {
if (newCapacity < size()) return;
AnyType[] old = theItem;
theItem = (AnyType[]) new Object[newCapacity];
for (int i = 0; i < size(); i++) {
theItem[i] = old[i];
}
}
public void push(AnyType newVal) {
if (theItem.length == size()) {
ensureCapacity(size()*2+1);
}
theSize++;
theItem[theSize] = newVal;
}
public AnyType pop() {
if (isEmpty()) {
throw new IndexOutOfBoundsException("Empty");
}
AnyType item = theItem[theSize];
theSize--;
return item;
}
public AnyType top() {
if (isEmpty()) {
throw new IndexOutOfBoundsException("Empty");
}
return theItem[theSize];
}
}
测试
package MyStack;
public class MyStackArrayTest {
public static void main(String[] args) {
MyStackArray<String> myStack = new MyStackArray<>();
myStack.push("a");
myStack.push("b");
myStack.push("c");
System.out.println(myStack.size());
System.out.println(myStack.top());
System.out.println(myStack.pop());
System.out.println(myStack.top());
System.out.println(myStack.pop());
System.out.println(myStack.top());
System.out.println(myStack.pop());
System.out.println(myStack.top());
}
}