优先队列C语言实现

优先队列利用堆实现,堆的实现在前面已经说过了,优先队列的一个重要的操作是:

1.  heap_max  O(1)  

2. heap_extract_max  O(lgn)

3. heap_increase_key  O(lgn)

4, heap_insert  O(lgn)

下面是C语言实现

#define MIN -100000

int heap_max(struct heap *h)
{
    return h->arr[1];
}

int heap_extract_max(struct heap *h)
{
    int max = h->arr[1];
    h->arr[1] = h->arr[h->size];
    h->size--;
    max_heapify(h, 1);
    return max;
}

void heap_increase_key(struct heap *h, int pos, int key)
{
    if (h->arr[pos] < key) {
        h->arr[pos] = key;
        while (pos > 1 && h->arr[pos] > h->arr[pos / 2]) {
            swap(&(h->arr[pos]), &(h->arr[pos / 2]));
            pos /= 2;
        }
    }
}

void heap_insert(struct heap * h, int key)
{
    //将最后一个元素后的元素设为无穷小,然后增加其键值
    h->arr[++(h->size)] = MIN;
    heap_increase_key(h, h->size, key);
}














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值