博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉堆实现优先队列
阅读量:4331 次
发布时间:2019-06-06

本文共 1557 字,大约阅读时间需要 5 分钟。

  优先队列是一种特殊的队列,并不是按照“先进先出”的规则进出队列。

  相对于普通的队列,优先队列的不同之处在于“优先”二字。优先队列中的元素拥有不同的优先级,进入队列的元素都按照

某一个性质进行排序,出队时选择优先级最高的元素。

  二叉堆:父节点的值总大于(小于)任一子节点的值。所以,最大值或者最小值总在根节点,可以在常数时间内取得。把最大

、最小值映射到优先队列中的优先级,就可以用二叉堆来实现优先队列。

  二叉堆是一棵完全二叉树,如果用数组来存放二叉堆的元素,那么当父节点为 i 时,左儿子节点是2i,右儿子节点是2i+1。

基于这一特性,可以直接用数组来存放二叉堆的元素。

  

1 class priorityQueue 2 { 3     int size; 4     int length; 5     int *vec; 6  7     public : 8         priorityQueue(const int size):size(size),length(1) 9         {10             vec = new int[size];11         };12         ~priorityQueue()13         {14         }15         void enqueue( int data );16         void dequeue();17         void print()18         {19             int i = length-1;20             while( i>=1 )21             {22                 cout << vec[i] << " ";23                 i--;24             }25             cout << endl;26         }27 };28 29 void priorityQueue::enqueue( int data )30 {31     if( length
0 && vec[parent]>data )36 {37 vec[hole] = vec[parent];38 hole = parent;39 parent = (hole)/2;40 }41 vec[hole] = data;42 length++;43 }44 else45 {46 cout << "队列满" << endl;47 }48 }49 50 void priorityQueue::dequeue()51 {52 if( length>1 )53 {54 int hole = 1;55 int child = 2*hole;56 int data = vec[--length];57 while( child<=length )58 {59 if( child+1<=length )60 {61 child = vec[child]

 

转载于:https://www.cnblogs.com/jc-nogame/p/5953658.html

你可能感兴趣的文章
我要过四级
查看>>
动态改变对话框的位置和大小
查看>>
div绝对定位针对手机浏览器的区别
查看>>
sql
查看>>
How to intall and configure Haproxy on Centos
查看>>
poj 2311 Cutting Game 博弈论
查看>>
Python3中的SocketServer
查看>>
Web.config配置configSections学习
查看>>
复合数据类型,英文词频统计
查看>>
【leetcode】Remove Duplicates from Sorted Array II
查看>>
java中面向对象的理解
查看>>
PHP 使用 OSS 批量上传图片
查看>>
vue.js 的插件 vue-resource
查看>>
如何查看屏幕touch driver是否在正常工作
查看>>
IOS的多线程编程
查看>>
ANGULAR JS POST 数据解析
查看>>
命中注定码农路[开篇]
查看>>
使用CSS隐藏HTML元素的4种常用方法
查看>>
【COCI2015-2016contest6】parovi
查看>>
php date("Y-m-d H:i:s") 出现警告信息
查看>>