优先队列C语言实现
2015-08-03 23:26
681 查看
优先队列利用堆实现,堆的实现在前面已经说过了,优先队列的一个重要的操作是:
1. heap_max O(1)
2. heap_extract_max O(lgn)
3. heap_increase_key O(lgn)
4, heap_insert O(lgn)
下面是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); }
相关文章推荐
- CL——Windows下命令行运行C/C++
- 一起talk C栗子吧(第三十回:C语言实例--快速排序)
- 【C++】sizeof
- c++中的函数 和 c 函数的不同
- 5、C语言和设计模式(之组合模式)
- 4、C语言和设计模式(之原型模式)
- C语言的const与C++const的区别
- 3、C语言和设计模式(之单件模式)
- C++成员变量的初始化顺序问题
- C++运算符 转换
- 10道C++输出易错笔试题收集
- 2、C语言和设计模式(继承、封装、多态)
- 1、C语言和设计模式(之开篇)
- iOS开发分分钟搞定C语言 —— 宏定义和关键字
- C++知识点总结(6)
- C++知识点总结(6)
- C++ 布尔类型bool
- qt c++ bad_alloc
- c++ opencv显示对话框
- c++ opencv显示对话框