首先,定义栈空的异常类型:
class StackEmptyException extends RuntimeException
{
public StackEmptyException(String err)
{
super(err);
}
}
然后,定义Stack接口
interface Stack
{
public int getSize();
public boolean isEmpty();
public void push(Object obj);
public Object pop() throws StackEmptyException;
public Object peek() throws StackEmptyException;
}
class StackArray implements Stack
{
private final int MaxSize = 10;
private Object[] stack;
private int top;
public StackArray()
{
stack = new Object[MaxSize];
top = -1;
}
public int getSize()
{
return top + 1;
}
public boolean isEmpty()
{
return top == -1;
}
public void push(Object obj)
{
if(getSize() >= stack.length)
resizeSpace();
stack[++top] = obj;
}
private void resizeSpace()
{
Object[] resizeArray = new Object[stack.length*2];
for(int i = 0; i < stack.length;++i)
resizeArray[i] = stack[i];
stack = resizeArray;
}
public Object pop() throws StackEmptyException
{
if(getSize() < 1)
throw new StackEmptyException("Error!the stack is empty");
Object tmp = stack[top];
stack[top--] = null;
return tmp;
}
public Object peek()
{
if(getSize() < 1)
throw new StackEmptyException("Error!the stack is empty");
return stack[top];
}
}
栈的链式存储实现
class SLNode
{
Object data;
SLNode next;
public SLNode(Object e)
{
data = e;
next = null;
}
}
class StackSLinked implements Stack
{
private SLNode top;
private int size;
public StackSLinked()
{
top = null;
size = 0;
}
public int getSize()
{
return size;
}
public boolean isEmpty()
{
return size == 0;
}
public void push(Object obj)
{
SLNode tmp = new SLNode(obj);
tmp.next = top;
top = tmp;
size++;
}
public Object pop() throws StackEmptyException
{
if(size < 1)
throw new StackEmptyException("error!The stack is empty");
Object tmp = top.data;
top = top.next;
size--;
return tmp;
}
public Object peek() throws StackEmptyException
{
if(size < 1)
throw new StackEmptyException("error!The stack is empty");
return top.data;
}
}