ArrayStack成员和各个方法实现

来源:互联网 发布:电国网络电视直播台 编辑:程序博客网 时间:2024/06/05 19:06

ArrayStack成员和各个方法实现

有了ArrayList的实现,实现ArrayStack好多了。

 

public void push(Telement);              需要数组 T[],容量,增量,栈顶

    public T pop();                               需要数组 T[]

    public T peek();                              需要数组 T[]

    public boolean isEmpty();                     需要栈顶

    public int size();                            需要栈顶

    public Iterator<T> itorator();                需要数组 T[]

    public String toString();                     需要数组 T[]

 

成员可以定义4个如下:

public class ArrayStack<T> implements StackADT<T> {

 

    private final int DEFAULT_CAPACITY = 100;

    private final int INCREMENT=10;

    private T[]stack;

    private int top;

       ….

}

 

方法的实现

 

构造方法

@SuppressWarnings("unchecked")

    public ArrayStack(){

       //stack = newT[DEFAULT_CAPCITY];

       stack = (T[])(new Object[DEFAULT_CAPACITY]);

       top = 0;

    }

Push方法:异常情况是栈满

@Override

    public void push(T element) {

           if(stack.length ==top)

           expandCapacity();

       stack[top] =element;

       top ++;

    }

    private void expandCapacity() {   

       stack = Arrays.copyOf(stack,stack.length+INCREMENT);

    }

 

其他方法也相对比较简单。注意,top就是栈中实际元素的数量

@Override

    public T pop() {

       if(isEmpty())

           throw new EmptyCollectionException("the stack is empty!");

       top--;

       T result = stack[top];

       stack[top] =null;

       returnresult;

    }

 

    @Override

    public T peek() {

       if(isEmpty())

           throw new EmptyCollectionException("the stack is empty!");

       returnstack[top-1];

    }

 

    @Override

    public boolean isEmpty() {

       if(0== size())

           return true;

       else

       return false;

    }

 

    @Override

    public int size() {

       returntop;

    }

 

迭代的实现。和ArrayList的实现方法差不多。总是就是2个方法而已,一个问“有没有下个了”,如果有,那么另一个方法就“返回下一个”。

@Override

    public Iterator<T> iterator() {

       return new ArrayStackIterator();

    }

   

    private class ArrayStackIterator<T> implementsIterator<T>{

       int pointer = -1;

       @Override

       public boolean hasNext() {//有没有下一个?

           if(pointer <top-1)

              return true;

           else

              return false;

       }

       @Override

       public T next() {//返回下一个

           pointer++;

           return(T) stack[pointer];

       }

      

    }

    public String toString(){

       //调用了iterator,然后把元素的toString累计到一起就行了。每个人都会。。

       Iterator<T> it  =  iterator();

       StringBuilder sb = new StringBuilder();

       while(it.hasNext()){

           sb.append(it.next().toString()+"\n");        

       }

       returnsb.toString();      

    }

 

0 0
原创粉丝点击