文章插图
在示例中,我们规定数值越小优先级越高 。我们每执行一次入队操作时,小的元素都会靠近头队,在出队的时候,元素小的也就先出队 。
优先队列的代码实现
这里使用的数组实现优先队列,用数组实现主要原因是更好理解优先队列的思想 。一般都是使用堆来实现优先队列,因为数组实现在插入的时候对数据的排序代价比较大 。
/** * 优先队列 */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)的数据结构
- 队列可以使用数组和链表实现,数组实现叫作顺序队列,链表实现叫作链式队列
- 循环队列解决了顺序队列的数据迁移带来的性能损耗的问题
- 双端队列是队头和队尾都可以进行入队、出队操作的队列
- 优先队列是一种不必遵循先进先出规则的队列,任意元素加入时,都会讲优先级最高的放入到队头
推荐阅读
- Docker命令行入门大全:这18条,你不得不知
- MySQL命令,一篇文章替你全部搞定
- 你真的了解噪音吗 电脑风扇声音大怎么办
- 方便面=垃圾食品?真相看这里…
- 2020年,你需要掌握的10大趋势技术!
- 饭后这些事情不要做?10个饭后小习惯你了解多少
- 住房贷款,选10年还是30年,一文帮你做出决定
- 小米电视被禁止安装软件!教你最新解决办法
- 知道饭店的鸡蛋汤为什么滑嫩好喝么?做法顺序很关键,学会你也行
- 带你一次看懂2MP、1080P、4K、8K!网友:真的有必要搞4K吗?