栈的Java实现(顺序存储实现与链式存储实现)

来源:互联网 发布:情趣内衣淘宝网卖家秀 编辑:程序博客网 时间:2024/05/01 06:53

首先,定义栈空的异常类型:

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



原创粉丝点击