1,抽象数据类型:
public interface Stack {
public boolean empty();
public Object peek();
public void push(Object theObject);
public Object pop();
}
2,数组表示形式:
public class ArrayStack implements Stack {
int top; // current top of stack
Object[] stack; // element array
public ArrayStack(int initialCapacity) {
if (initialCapacity < 1)
throw new IllegalArgumentException("initialCapacity must be >= 1");
stack = new Object[initialCapacity];
top = -1;
}
public ArrayStack() {
this(10);
}
public boolean empty() {
return top == -1;
}
public Object peek() {
if (empty())
throw new EmptyStackException();
return stack[top];
}
public void push(Object theElement) {
if (top == stack.length - 1)
stack = ChangeArrayLength.changeLength1D(stack, 2 * stack.length);
stack[++top] = theElement;
}
public Object pop() {
if (empty())
throw new EmptyStackException();
Object topElement = stack[top];
stack[top--] = null; // enable garbage collection
return topElement;
}
}
3,链节点定义:
public class ChainNode {
public Object element;
public ChainNode next;
ChainNode() {
}
ChainNode(Object element) {
this.element = element;
}
ChainNode(Object element, ChainNode next) {
this.element = element;
this.next = next;
}
}
4,链表表示
public class LinkedStack implements Stack {
protected ChainNode topNode;
public LinkedStack(int initialCapacity) {
}
public LinkedStack() {
this(0);
}
public boolean empty() {
return topNode == null;
}
public Object peek() {
if (empty())
throw new EmptyStackException();
return topNode.element;
}
public void push(Object theElement) {
topNode = new ChainNode(theElement, topNode);
}
public Object pop() {
if (empty())
throw new EmptyStackException();
Object topElement = topNode.element;
topNode = topNode.next;
return topElement;
}
}