用数组实现固定长度的队列和栈

栈:先进后出

判空判满

push

pop

peek

public class ArrayStack {
    private Integer index;//把新来的数加入index上
    private Integer[] arr;
    public ArrayStack(int initSize){
        if(initSize==0) {
            throw new IllegalArgumentException("less than 0");
        }
       arr=new Integer[initSize];
    }
    public  void  push(int a){
        if(index==arr.length){
            throw new ArrayIndexOutOfBoundsException("栈满") ;
        }
        arr[index++]=a;

    }
    public  Integer  pop(){
        if(index==0){
            throw new ArrayIndexOutOfBoundsException("空栈") ;
        }
        return arr[--index];

    }
    public  Integer  peek(){
        if(index==0){
            throw new ArrayIndexOutOfBoundsException("空栈") ;
        }
        return arr[index-1];

    }

}

队列:先进先出

start(size不为0)拿取哪个未知的数,start为arr.length-1, 且szie!=arr.legth; start归零

end(和size有关,size不满)加,end为arr.length-1,且szie!=arr.legth, end归零

size:不大于数组的长度

push():关注 end和size

poll():关注 start和size

public class ArrayQueue {
    private int end;
    private int start;
    private int size;
    private Integer[] arr;

    public ArrayQueue(int initSize){
        if(initSize==0){
            throw  new IllegalArgumentException("less than 0");
        }
        end=0;
        start=0;
        size=0;
        arr=new Integer[initSize];
    }


    public Integer pop(){
     if(size==0){
         throw new ArrayIndexOutOfBoundsException("空");
     }
        size--;
     int ret=start;
     start=start==arr.length-1?0:start+1;
       return arr[ret];

    }
    public void push(int a){
      if(size==arr.length){
          throw new ArrayIndexOutOfBoundsException("队列满");
      }
      arr[end]=a;
      size++;
      end=end==arr.length-1?0:end+1;
    }
    public int peek(){
        if (size==0) throw new ArrayIndexOutOfBoundsException("空");
      return arr[start];
    }
}

猜你喜欢

转载自www.cnblogs.com/bowenqianngzhibushiwo/p/11620777.html
今日推荐