首页 > 其他 > 详细

优先队列

时间:2019-08-16 22:09:54      阅读:137      评论:0      收藏:0      [点我收藏+]

概念和性质

  1. 优先队列是允许至少下列两种操作的数据结构:插入(Insert)和删除最小者(DeleteMin)
  2. 实现优先队列的数据结构叫二叉堆,他有两个性质,结构性和堆序性,堆的操作必须要到堆的所有性质都被满足才能终止
  3. 堆是一颗被完全填满的二叉树,在树的底层上的元素从左到右填入的,这样的树叫完全二叉树。可以证明一颗高为\(h\)的完全二叉树有\(2^h\)\(2^{h + 1} - 1\)个节点,他的高为\(?log N?\)
  4. 可以用一个数组来表示一个完全二叉树,对于数组中任意位置\(i\)上的元素,其左儿子在位置\(2i\)处,右儿子在位置\(2i + 1\)处,它的父亲在位置\(?i / 2?\)处,

技术分享图片

数组中的元素 A B C D E F G H I J
数组的下标 0 1 2 3 4 5 6 7 8 9 10 11 12
  • 它的数据结构为
struct HeapStruct;
typedef struct HeapStruct *PriorityQueue;

struct HeapStruct
{
    int Capacity;
    int Size;
    ElementType *Elements;
}

基本操作

插入

void Insert(ElementType X, PriorityQueue H)
{
    int i;
    if (IsFull(H))
    {
        Error("Priority queue is Full");
        return;
    }
    for (i = ++H->Size; H->Element[i / 2] > X; i /= 2) H->Element[i] = H->Element[i / 2];
    H->Element[i] = X;
}

优先队列

原文:https://www.cnblogs.com/Anthony-ling/p/11366180.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!