看过园子里和CSND上那么多大牛精彩的博客后,早就按捺不住想亲手写上几篇。奈何每次坐在电脑前准备敲字的时候,立马赶到浑身不自在,无从下手。实在是因为自高考之后,大学以来,本人几乎就再没动笔写过一篇文字,写作水平退化实在严重。今天鼓起勇气开始写作博客,一方面希望通过多写慢慢地找回写作的感觉,一方面也希望通过博客和大家多多交流,共同进步。
既然是第一次试手,就写个简单易懂的内容——优先队列。
话不多说,先上代码。
1 /** 2 * @author Mr Left 3 * @version 1.0 4 */ 5 public class PriorityQueue { 6 private int[] elems; 7 private int max;//队列最大容量 8 private int size;//队列当前容量 9 10 public PriorityQueue(int s) { 11 this.max = s; 12 elems = new int[max]; 13 size = 0; 14 } 15 16 public void enqueue(int ele) { 17 if(size == 0) 18 elems[size++] = ele; 19 else { 20 int i = size-1; 21 while(i>=0 && ele<elems[i]) { 22 elems[i+1] = elems[i]; 23 i--; 24 } 25 elems[i+1] = ele; 26 size++; 27 } 28 29 } 30 31 public int dequeue() { 32 return elems[--size]; 33 } 34 35 public int peek() { 36 return elems[size-1]; 37 } 38 39 public boolean isEmpty() { 40 if(size == 0) 41 return true; 42 else 43 return false; 44 } 45 public boolean isFull() { 46 if(size == max) 47 return true; 48 else 49 return false; 50 } 51 52 53 public static void main(String[] args) { 54 PriorityQueue priorityQueue = new PriorityQueue(10); 55 priorityQueue.enqueue(1); 56 priorityQueue.enqueue(3); 57 priorityQueue.enqueue(2); 58 priorityQueue.enqueue(9); 59 priorityQueue.enqueue(4); 60 priorityQueue.enqueue(5); 61 priorityQueue.enqueue(3); 62 priorityQueue.enqueue(2); 63 priorityQueue.enqueue(3); 64 priorityQueue.enqueue(2); 65 66 System.out.println(priorityQueue.dequeue()); 67 System.out.println(priorityQueue.dequeue()); 68 System.out.println(priorityQueue.dequeue()); 69 System.out.println(priorityQueue.dequeue()); 70 System.out.println(priorityQueue.dequeue()); 71 System.out.println(priorityQueue.dequeue()); 72 System.out.println(priorityQueue.dequeue()); 73 System.out.println(priorityQueue.dequeue()); 74 System.out.println(priorityQueue.dequeue()); 75 System.out.println(priorityQueue.dequeue()); 76 } 77 }
当然,这代码有很多不足之处,比如每次插入时要判断是否已满,弹出时要判断是否为空,这我都省略未写,大概意思表达清楚就行了。
好了,今天就写这么点,争取以后每天都有新博文。
第一篇博客——基于数组的优先队列(java版),布布扣,bubuko.com
时间: 2024-10-11 01:30:33