看完这篇你还不知道这些队列,我这些图白作了( 三 )


看完这篇你还不知道这些队列,我这些图白作了

文章插图
 
在示例中,我们规定数值越小优先级越高 。我们每执行一次入队操作时,小的元素都会靠近头队,在出队的时候,元素小的也就先出队 。
优先队列的代码实现
这里使用的数组实现优先队列,用数组实现主要原因是更好理解优先队列的思想 。一般都是使用堆来实现优先队列,因为数组实现在插入的时候对数据的排序代价比较大 。
/** * 优先队列 */public class PriorityQueue { // 存放数据的数组 private Integer[] items; // 容器的大小 private int size = 0; // 第一个节点 private int head = 0; // 构造函数 public PriorityQueue(int size){ this.size = size; items = new Integer[size]; } /** * 入队操作 * @param data * @return */ public int enqueue(Integer data){ int j; if (head == 0){ items[head++] = data; } else { for (j=head-1;j>=0;j--){ // 将小的数往后排 if (data > items[j]){ items[j+1] = items[j]; }else { break; } } items[j+1] = data; head++; } return 1; } public Integer dequeue(){ return items[--head]; }}总结
  • 队列是一种遵循先进先出(FIFO)的数据结构
  • 队列可以使用数组和链表实现,数组实现叫作顺序队列,链表实现叫作链式队列
  • 循环队列解决了顺序队列的数据迁移带来的性能损耗的问题
  • 双端队列是队头和队尾都可以进行入队、出队操作的队列
  • 优先队列是一种不必遵循先进先出规则的队列,任意元素加入时,都会讲优先级最高的放入到队头




推荐阅读