資料機構之優先順序佇列
阿新 • • 發佈:2019-02-18
20 0 10 30 15package com.zhiru; /* * 優先順序佇列例子 * 基於陣列實現 * ---------------------------- * 編號 1 2 3 4 5 * 優先權20 0 10 30 15//值小的優先權大 * 順序 2 3 5 1 4 */ public class PQueue { private int count=0;//佇列元素個數 private int maxSize=100;//佇列元素最大容量 private int[]data; PQueue(int size){ maxSize=size; data=new int[maxSize]; } public boolean isEmpty(){ return count==0; } public boolean isFull(){ return count==maxSize; } public int getSize(){ return count; } //將元素插入到隊尾 public void insert(int val){ if(count<=maxSize){ data[count++]=val; //插入後調整,保證權值大的在後面,即優先權大的在前面。 adjust(); } else System.out.print("佇列滿了\n"); } //在插入一個元素後將佇列進行調整,將優先權大(權值小)的調到隊頭. //類似插入排序演算法. public void adjust(){ if(count<=maxSize){ int temp=data[count-1]; for(int j=count-2;j>=0;j++){ if(data[j]<=temp) break; else data[j+1]=data[j];//元素後移. data[j+1]=temp;//找到合適的位置插入. } } } //返回隊頭元素. public int getMin(){ if(count==0) return -1;//表示隊空. int x=data[0]; for(int i=1;i<count;i++) data[i-1]=data[i];//前移刪除隊頭元素. count--;//長度減一 return x; } public void printPqueue(){ for(int j=0;j<count;j++){ System.out.print(data[j]+" "); } System.out.print("\n"); } public static void main(String[]args){ PQueue pq=new PQueue(5);//maxSize=; int[]x={20,0,10,30,15}; for(int i=0;i<x.length;i++){ pq.insert(x[i]); } pq.printPqueue(); pq.getMin(); pq.printPqueue(); } }
0 10 30 15