スタック

2055 ワード

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;
	}
}