拖欠很久的堆
来源:互联网 发布:windows ping端口命令 编辑:程序博客网 时间:2024/03/29 01:27
#include<vector>#include<iostream>using namespace std;//最小堆template<typename T>class Heap{public: typedef T elemtype; Heap(T *revarr, int size) :cursize(size) { for (int i = 0; i < cursize; i++) { arr.push_back(revarr[i]); } setheap(); } //由该结点向下调整堆 void downadjust(int pos) { int start = pos; int end = cursize; int i = start * 2 + 1; T temp = arr[start]; while (i < end) { if (i + 1 < end && arr[i] > arr[i + 1]) i++; if (arr[i] < temp) { arr[start] = arr[i]; start = i; } else { break; } i = i * 2 + 1; } arr[start] = temp; } //由该节点向上调整该节点 void upadjust(int pos) { int end = pos; int start = cursize - 1; int i = (start - 1) / 2; T temp = arr[start]; while (i >= end) { if (arr[i] >= temp) { break; } else { arr[start] = arr[i]; start = i; } i = (i - 1) / 2; } } bool remove(T * data) { if (data == NULL || arr.size() == 0) { return false; } *data = arr[0]; --cursize; if (cursize != 0) { arr[0] = arr[cursize]; arr.pop_back(); downadjust(0); } return true; } void insert(T data) { cursize++; arr.push_back(data); upadjust(0); } void show() { for (unsigned i = 0; i < arr.size(); i++) { cout << arr[i]<<" "; } cout << endl; }private: void setheap() { for (int pos = (cursize - 1) / 2; pos >= 0; --pos) downadjust(pos); } int cursize; vector<T> arr;};int main(){ int arr[] = {1,2,3,7,6,4,5,0}; Heap<int> heap(arr,8); int data; heap.show(); for (int i = 0; i < 8; i++) { heap.remove(&data); cout << data << endl; } return 0;}
堆排序和堆的相关知识很重要但是却一直没有写过堆的相关代码,今天写写,练练手。
想起杨老师说过的一句话,如果我让你写优先队列怎么办?
优先队列其实就是我们上面的堆这种结构。只是堆顶是优先级最高而已。
0 0
- 拖欠很久的堆
- 拖欠的Java笔记
- 拖欠
- 很久很久的事
- 对公司拖欠薪资的建议
- 某银行降低贷款拖欠率的逻辑回归建模
- 很久很久很久以前的一个故事
- 很久很久的不上这个地方了
- 很久以来的梦
- 很久没有的随笔
- 很久很久以前的事
- 一个很久的故事
- 很久
- 搁置了很久的想法
- 收藏很久的开关电源书籍
- 捕捉运行很久的SQL
- 搞了很久的KindEditor
- 找了很久的bug
- GitHub与Git指令入门
- http get请求
- Vijos 1409-纪念品分组【贪心】
- 每天一篇python:系统篇
- 虚拟机桥接配置nat配置上网
- 拖欠很久的堆
- NodeJS 中模块module查找过程
- Android 如何快速浏览本地 API文档
- android系统设置里的字体大小导致的布局混乱问题
- OC学习日记Day1:程序怎么执行、类和对象
- LeetCode *** 54. Spiral Matrix
- 最新版ffmpeg 提取视频关键帧
- Lua数据类型转换
- 拍照怎么搜题?(下)