编写一个用数组实现堆栈原理的程序,并把welcome institute nan jing to engineering 6个单词以一定的顺序放入堆栈中,并按照welcome to nan jing engineering institute顺序输出。

解决方案 »

  1.   


    class StackEmptyException extends RuntimeException{
    private static final long serialVersionUID = 1L;
    public StackEmptyException(String msg){
    super(msg);
    }
    }
    public class Stack {
    private int size;
    private int capacity;
    private Object elements[];
    public Stack(int capacity){
    this.size = 0;
    this.capacity = capacity;
    this.elements = new Object[capacity];
    }
    public void push(Object e){
    ensureCapacity();
    elements[size++] = e;
    }
    public Object pop(){
    if(size == 0){
    throw new StackEmptyException("stack empty!");
    }
    /****************************************/
    //memory leak!
    //return elements[--size];
    /****************************************/
    Object retuslt = elements[--size];
    elements[size] = null;
    return retuslt;
    }
    public int size(){
    return size;
    }
    public String toString(){
    StringBuilder sb = new StringBuilder();
    sb.append("[");
    for(int i=0;i<elements.length;i++){
    if(elements[i] == null)sb.append("[]");
    else sb.append(elements[i].toString());
    if(i<elements.length-1)sb.append(",");
    }
    sb.append("]");
    return sb.toString();
    }
    private void ensureCapacity(){
    if(size >= capacity){//stack full
    System.out.println("stack full");
    Object oldElements = elements;
    elements = new Object[2*capacity];
    capacity = 2*capacity;
    //System.arrayCopy是复制引用,也就是浅拷贝
    System.arraycopy(oldElements, 0, elements, 0, size);
    }
    }
    public static void main(String[] args) {
    Stack stack = new Stack(2);
    stack.push("hello");
    stack.push("world");
    System.out.println(stack.size());
    System.out.println(stack);
    stack.push("yes");
    stack.push("no");
    stack.push("full");
    System.out.println(stack.size());
    System.out.println(stack);
    }
    }