用二叉堆实现优先队列
来源:互联网 发布:淘宝优秀的试用报告 编辑:程序博客网 时间:2024/05/16 07:34
#include <cstdio>#include <iostream>#define MAXN 100010using namespace std;class priority_queue{ int sizet,heap[MAXN];public: void clear(){ sizet=0; } void push(int x){ int i=sizet++; while(i>0){ int p=(i-1)/2; if(heap[p]<x) { heap[i]=heap[p]; i=p; } else break; } heap[i]=x; } int top(){ return heap[0]; } void pop(){ int i=0; heap[i]=heap[--sizet]; int child=i*2+1; while(child<sizet){ if(child+1<sizet){ if(heap[child]>heap[child+1]&&heap[child]>heap[i]) { swap(heap[child],heap[i]); i=child; } else if(heap[child+1]>heap[child]&&heap[child+1]>heap[i]){ swap(heap[child+1],heap[i]); i=child+1; } else break; } else{ if(heap[child]>heap[i]){ swap(heap[child],heap[i]); i=child; } else break; } child=i*2+1; } } bool empty(){ if(sizet==0) return true; else return false; }};int n,v;char op[3];priority_queue pq;int main(){ while(scanf("%d",&n)!=EOF){ pq.clear(); for(int i=1;i<=n;i++){ scanf("%s",op); if(op[0]=='A'){ scanf("%d",&v); pq.push(v); } else { printf("%d\n",pq.top()); pq.pop(); } } } return 0;}
0 0
- 用二叉堆实现优先队列
- 用有序二叉堆实现优先队列
- 优先队列--二叉堆实现
- 优先队列(二叉堆实现) + 堆排序
- 用java实现二叉查找树、堆和优先队列
- 优先队列的实现--二叉堆
- 优先队列——二叉堆实现
- 优先队列二叉堆 C语言实现
- 优先队列(利用二叉堆实现)
- 优先队列的数组、二叉堆实现
- 优先队列之二叉堆(JAVA实现)
- 优先队列-二叉堆Java实现
- 优先队列--二叉堆
- 二叉堆/优先队列
- 优先队列---二叉堆
- 用堆实现优先队列
- 用堆实现优先队列
- 用堆实现优先队列
- noip2006 数列 (二进制)
- Qt生成XML文件
- 父子进程信号交互
- 避免缓冲区溢出的方法
- 使用AndroidStudio执行UI Automator 自动化测试
- 用二叉堆实现优先队列
- hdoj 1237 简单计算器
- Linux wait()函数 http://blog.163.com/lqy_super/blog/static/1997510212012112953858902/
- 对Hash Join的一次优化之--10104 trace-bucket
- 苹果操作系统(OS X和iOS)表情字符
- MongoDB学习日记(九):index
- 二叉排序树删除节点
- Java 对jni的调用
- 兔子--查看Android Studio的版本信息