实验案例4-4:windows消息队列(堆的应用)
来源:互联网 发布:算法导论 高清pdf 编辑:程序博客网 时间:2024/05/22 06:39
PUT为把消息加入队列,后为消息的优先级
GET为从消息队列中取出优先级最高的队列
输入样例:
9
PUT msg1 5
PUT msg2 4
GET
PUT msg3 2
PUT msg4 4
GET
GET
GET
GET
输出样例:
msg2
msg3
msg4
msg1
EMPTY QUEUE!
#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 100000#define MAXS 10typedef struct Message{ char msg[MAXS+1]; int p;}ElementType;typedef struct HeapStruct* MinHeap;struct HeapStruct{ ElementType* Elements; //这里不可为Elements[size] int size;//堆的大小 }; MinHeap create(int maxsize){ MinHeap H=malloc(sizeof(struct HeapStruct)); H->Elements=malloc(sizeof(struct Message)*(maxsize+1));//堆中maxsize+1个元素,i=0起哨兵作用,比所有可能的值都小, //第一个元素为i=1,最后一个为i=size, //节点i的子节点分别是2*i,2*i+1 H->size=0; H->Elements[0].p=-1; return H;}void insert(MinHeap H,ElementType X){ int i; for(i=++H->size;H->Elements[i/2].p>X.p;i/=2){ H->Elements[i].p=H->Elements[i/2].p; strcpy(H->Elements[i].msg,H->Elements[i/2].msg); } H->Elements[i].p=X.p; strcpy(H->Elements[i].msg,X.msg);}ElementType deleteMin(MinHeap H){ int parent,child; ElementType minx,tmp; if(!H->size){ minx.p=-1; return minx; } minx.p=H->Elements[1].p; strcpy(minx.msg,H->Elements[1].msg); tmp.p=H->Elements[H->size].p; strcpy(tmp.msg,H->Elements[H->size--].msg); for(parent=1;2*parent<=H->size;parent=child){ child=2*parent; if(child!=H->size&&H->Elements[child].p>H->Elements[child+1].p) child++; if(tmp.p<=H->Elements[child].p) break; else{ H->Elements[parent].p=H->Elements[child].p; strcpy(H->Elements[parent].msg,H->Elements[child].msg); } } H->Elements[parent].p=tmp.p; strcpy(H->Elements[parent].msg,tmp.msg); return minx; }int main(){ int N,i; char cmd[4]; MinHeap H; ElementType X; scanf("%d\n",&N); H=create(N); for(i=0;i<N;i++){ scanf("%s",cmd); if(cmd[0]=='P'){ scanf("%s %d\n",X.msg,&X.p); insert(H,X); }else{ X=deleteMin(H); if(X.p==-1) printf("EMPTY QUEUE!\n"); else printf("%s\n",X.msg); } } return 0;}
0 0
- 实验案例4-4:windows消息队列(堆的应用)
- 《数据结构学习与实验指导》4-4:Windows消息队列
- 堆的应用(优先级队列、海量数据处理、堆排序)
- 堆(优先级队列) 的应用
- 柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航)
- 4--消息队列(报文队列)实践到内核--消息队列的控制
- 4--消息队列(报文队列)实践到内核--消息队列的控制
- 一个快速的消息队列(最大堆)
- 实验4:栈和队列的基本操作实现及其应用——循环队列
- 实验4:栈和队列的基本操作实现及其应用——链队列
- 实验4:栈和队列的基本操作实现及其应用之《循环队列》
- 实验4:栈和队列的基本操作实现及其应用之《链队列》
- 实验4:栈和队列的基本操作实现及其应用之《顺序队列》
- 实验4:栈和队列的基本操作实现及其应用之《链队列》
- 实验4:栈和队列的基本操作实现及其应用之《顺序队列》
- 实验4:栈和队列的基本操作实现及其应用之《链队列》
- Windows消息队列的注意
- linux消息队列的应用
- 点击Dialog中的确定退出当前Activity,怎么样能保存当前页面的数据
- android:PopupWindow设置背景色为0x00000000为什么不是黑色
- MySQL的Innodb缓存相关优化
- 11、Struts2 的文件上传和下载
- .Net FrameWork常用类
- 实验案例4-4:windows消息队列(堆的应用)
- 敏捷2016 总结 (包括16年社区活动的收获问答)
- Android 5.0 执行rawQuery闪退,但是在4.x正常,为什么?
- C#通用类库--数字转为人民币汉字大写表示
- 动态SQL语句
- cassandra学习错误问题整合
- Java中的四种权限
- 一,nginx与tomcat整合实现负载均衡
- C#获取Excel全部的sheet