java数据结构和算法3

队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。


package com.yf.structure;

public class MyQueue {
   private Object[] queArray;
   private int maxSize;
   private int front;
   private int rear;
   private int nItems;
   public MyQueue(int s){
      maxSize=s;
      queArray=new Object[maxSize];
      front=0;
      rear=-1;
      nItems=0;
   }
   
   public void insert(int value){
      if(isFull()){
         System.out.println("full");
      }else{
         if(rear==maxSize-1){
            rear=-1;
         }
         queArray[++rear]=value;
         nItems++;
      }
   }
   
   public Object remove(){
      Object removeValue=null;
      if(!isEmpty()){
         removeValue=queArray[front];
         queArray[front]=null;
         front++;
         if(front==maxSize){
            front=0;
         }
         nItems--;
         return removeValue;
      }
      return removeValue;
   }
   
   public Object peekFront(){
      return queArray[front];
   }
   
   public boolean isFull(){
      return (nItems==maxSize);
   }
   
   public boolean isEmpty(){
      return (nItems==0);
   }
   
   public int getSize(){
      return nItems;
   }
   

   
}
package com.yf.structure;

public class testMain {

   public static void main(String[] args){
      MyQueue queue = new MyQueue(3);
      queue.insert(1);
      queue.insert(2);
      queue.insert(3);//queArray数组数据为[1,2,3]

      System.out.println(queue.peekFront()); //1
      queue.remove();//queArray数组数据为[null,2,3]
      System.out.println(queue.peekFront()); //2

      queue.insert(4);//queArray数组数据为[4,2,3]
      queue.insert(5);//队列已满,queArray数组数据为[4,2,3]
   }
}

    数组实现优先级队列,声明为int类型的数组,关键字是数组里面的元素,在插入的时候按照从大到小的顺序排列,也就是越小的元素优先级越高。

package com.yf.structure;

public class PriorityQue {
    private int maxSize;
    private int[] priQueArray;
    private int nItems;

    public PriorityQue(int s) {
         maxSize=s;
         priQueArray=new int[maxSize];
         nItems=0;
    }

    public void insert(int value){
        if(isFull()) {
            System.out.println("full");
            return;
        }
        int j;
        if(nItems==0){
            priQueArray[nItems++]=value;
        }else{
            j=nItems-1;
            while(j>=0&&value>priQueArray[j]){
                priQueArray[j+1]=priQueArray[j];
                j--;
            }
            priQueArray[j+1]=value;
            nItems++;
        }
    }

    public int remove(){
        int k=nItems-1;
        int value=priQueArray[k];
        priQueArray[k]=-1;
        nItems--;
        return value;
    }

    public int peekMin(){
        return priQueArray[nItems-1];
    }

    public boolean isEmpty(){
        return (nItems==0);
    }

    public boolean isFull(){
        return (nItems==maxSize);
    }
}
package com.yf.structure;

public class testMain {

   public static void main(String[] args){
      PriorityQue queue = new PriorityQue(3);
      queue.insert(1);
      queue.insert(4);
      queue.insert(3);//queArray数组数据为[1,2,3]

      System.out.println(queue.peekMin()); //1
      queue.remove();//queArray数组数据为[null,2,3]
      System.out.println(queue.peekMin()); //2

      queue.insert(4);//queArray数组数据为[4,2,3]
      queue.insert(5);//队列已满,queArray数组数据为[4,2,3]
   }
}

猜你喜欢

转载自blog.csdn.net/weixin_40839342/article/details/80857119