数据结构之优先级队列
2016-04-06 10:05
447 查看
如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列 这种数据结构。 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 。对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。
具体代码实现:
具体代码实现:
package data.struct.algorithm; //优先级队列 class PriorityQueue{ private int maxSize; private int[] queueArray; private int nItems; public PriorityQueue(int s){ maxSize=s; queueArray=new int[maxSize]; nItems=0; } public void enQueue(int value){ int j; if(this.isFull()){ throw new RuntimeException("优先级队列已满"); } if(nItems==0){ queueArray[nItems++]=value; } else { for(j=nItems-1;j>=0;j--){ if(value>queueArray[j]){ queueArray[j+1]=queueArray[j]; } else { break; } } queueArray[j+1]=value; nItems++; } } public int deQueue(){ return queueArray[--nItems]; } public int peek(){ return queueArray[nItems-1]; } public boolean isEmpty(){ return nItems==0; } public boolean isFull(){ return nItems==maxSize; } } public class PriorityQueueDemo { /** * @param args */ public static void main(String[] args) { PriorityQueue pQueue=new PriorityQueue(5); pQueue.enQueue(5); pQueue.enQueue(10); pQueue.enQueue(6); pQueue.enQueue(63); pQueue.enQueue(89); System.out.println(pQueue.deQueue()); System.out.println(pQueue.peek()); while(!pQueue.isEmpty()){ System.out.print(pQueue.deQueue()+" "); } System.out.println(); } }
相关文章推荐
- 统计无符号整型数的二进制码中‘1’的个数
- 链表-Merge Two Sorted Lists(合并两个单项链表)
- 数据结构之堆
- 数据结构 链式存储源码
- 数据结构 链式存储
- 数据结构 线性表
- 数据结构 线性表
- 数据结构和算法系列16 哈夫曼树
- 数据结构与算法学习-简单排序算法之冒泡排序与选择排序
- C 数据结构与算法 二分查找
- C++数据结构单链表
- 删除一个有序链表的重复元素
- 数据结构之栈(3)——链栈
- 数据结构之栈(2)——多栈共享技术
- 数据结构之顺序表的实现
- 数据结构之栈(1)——顺序栈
- java实现AVL树(一种自平衡二叉树)数据结构
- 数据结构之栈(0)——栈概览
- 数据结构--二叉树(1)
- 数据结构(主席树):COGS 2211. 谈笑风生