c++,优先队列

#include <iostream>

#include <algorithm>

#include <cmath>

#include <cstring>

#include <time.h>

using namespace std;

#define ROOT 1

#define FATHER(i) ((i)/2)

#define LEFT(i) ((i)*2)

#define RIGHT(i) ((i)*2+1)

#define cmp >

typedef struct PriorityQueue{

int *__data,*data;

int size,n;

}PriorityQueue;

PriorityQueue *initPQ(int size){

PriorityQueue *p=(PriorityQueue*)malloc(sizeof(PriorityQueue));

p->__data=(int*)malloc(sizeof(int)*size);

p->data=p->__data-ROOT;

p->size=size;

p->n=0;

return p;

}

void clearPQ(PriorityQueue *p){

if(!p)return ;

free(p->__data);

free(p);

return ;

}

int _empty(PriorityQueue *p){

return p->n==0;

}

int full(PriorityQueue *p){

return p->n==p->size;

}

int top(PriorityQueue *p){

return p->dataROOT;

}

void up_updata(int *data,int i){

cout<<endl<<"up "<<datai<<endl;

if(i==ROOT)return ;

if(datai cmp dataFATHER(i)){

swap(datai,dataFATHER(i));

up_updata(data,FATHER(i));

}

cout<<endl;

return ;

}

void down_updata(int *data,int i,int n){

cout<<endl<<"down "<<datai<<endl;

while(LEFT(i)<=n){

int ind=i,l=LEFT(i),r=RIGHT(i);

if(datal cmp dataind)ind=LEFT(i);

if(r<=n&&datar cmp dataind)ind=r;

if(ind==i)break;

swap(datai,dataind);

i=ind;

}

cout<<endl;

return ;

}

int push(PriorityQueue *p,int x){

if(full(p))return 0;

p->n+=1;

p->datap-\>n=x;

up_updata(p->data,p->n);

return 1;

}

int pop(PriorityQueue *p){

if(_empty(p))return 0;

p->dataROOT=p->datap-\>n;

p->n-=1;

down_updata(p->data,ROOT,p->n);

return 1;

}

void output(PriorityQueue *p){

cout<<"pq: "<<p->n<<" ";

for(int i=1;i<=p->n;i++){

cout<<p->datai<<" ";

}

cout<<endl;

return ;

}

int main(){

#define MAX_OP 100

PriorityQueue *p=initPQ(MAX_OP);

int op,x;

while(cin>>op){

if(op==1){

cin>>x;

cout<<x<<" insert:"<<endl;

push(p,x);

output(p);

}else{

cout<<"top"<<top(p)<<endl;

pop(p);

output(p);

}

}

clearPQ(p);

return 0;

}

相关推荐
淡海水9 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
leobertlan10 小时前
好玩系列:训练一个神经网络模型指导小孩玩游戏2-大局观教练
算法
Tisfy10 小时前
LeetCode 3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
算法·leetcode·题解·脑筋急转弯
乐迪信息11 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉
kiracrimson12 小时前
从缓存的角度看链表与线性表的差异
数据结构·链表·缓存
木井巳13 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
心抵鹊13 小时前
归并排序之翻转对(hard)
数据结构·算法
白山编程大哥13 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
_Twink1e13 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
shehuiyuelaiyuehao13 小时前
算法34,位运算符操作,总结
算法