队列(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] } }