資料結構系列之迴圈佇列
阿新 • • 發佈:2019-01-24
基於陣列的迴圈佇列的Java實現
1、藉助陣列建立一個迴圈佇列類
package 佇列; /*陣列實現的迴圈佇列*/ public class ArrayQueue { private int first,last,maxSize; private Object[] storage; public ArrayQueue(){ this(100); } public ArrayQueue(int n){ //建構函式 maxSize=n; storage=new Object[maxSize]; first=last=-1; } public int getLength(){ //取得佇列中有效資料長度 if(this.isEmpty()) return 0; else if(last>=first) return last-first+1; else return (maxSize-first)+(last-0+1); } public boolean isFull(){ //判斷是否為滿佇列 return first==0&&last==maxSize-1||first==last+1; } public boolean isEmpty(){ //判斷是否為空佇列 return first==-1; } public void enqueue(Object e1){ //進佇列操作 if(this.isEmpty()){ //當佇列為空時 storage[0]=e1; first=last=0; } else if(!this.isFull()){ //佇列不空且不滿時 if(last==maxSize-1){ //當last位於最後一個位置時 storage[0]=e1; last=0; }else storage[++last]=e1; } } public Object dequeue(){ //刪除佇列頭元素 if(!this.isEmpty()){ Object temp=storage[first]; if(first==last) //只有一個元素時 first=last=-1; else if(first==maxSize-1) //不止一個元素且first位於最後位置時 first=0; else //不止一個元素且first不是位於最後位置時 first++; return temp; } else return null; } public void printAll(){ if(!this.isEmpty()){ if(last>=first){//當first小於last時正常列印 for(int i=first;i<=last;i++) System.out.print(storage[i]+" "); } else{//當first大於last時分兩次列印,先列印first到maxSize-1;再列印0到last for(int i=first;i<maxSize;i++) System.out.print(storage[i]+" "); for(int j=0;j<last+1;j++) System.out.print(storage[j]+" "); } } else System.out.print("佇列已空!"); } }
2、建立測試類
package 佇列; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub ArrayQueue q=new ArrayQueue(3); q.enqueue(2); System.out.println("佇列此時長度為:"+q.getLength()); //1 q.enqueue(1); System.out.println("佇列此時長度為:"+q.getLength()); //2 q.enqueue(4);//3 q.dequeue();//2 System.out.println("佇列此時長度為:"+q.getLength()); //2 q.dequeue(); System.out.println("佇列此時長度為:"+q.getLength()); //1 q.dequeue();//0 q.enqueue(4); System.out.println("佇列此時長度為:"+q.getLength());//1 q.printAll(); } }
3、測試結果
佇列此時長度為:1
佇列此時長度為:2
佇列此時長度為:2
佇列此時長度為:1
佇列此時長度為:1
4