《数据结构学习与实验指导》4-4:Windows消息队列
来源:互联网 发布:js时间格式化 编辑:程序博客网 时间:2024/05/22 17:04
实验内容:消息队列是Windows系统的基础。对于每个进程,系统维护一个消息队列。如果在进程中有特定事件发生,系统将把这个消息连同其优先级加入到队列中。如果队列不是空的,可以从队列中按照优先级获取消息。
输入格式:输入第1行给出正整数N(N<=10^5)。随后N行,每行给出一个指令——GET或PUT,分别表示从队列中取出消息或将消息添加到队列中。如果指令是PUT,后面就有一个消息名称以及一个正整数,表示优先级,越小表示优先级越高。消息名称是长度不超过10个字符且不含空格的字符串。题目保证队列中消息的优先级无重复,且输入至少有一个GET。
输出格式:对于每个GET指令,在一行中输出消息队列中优先级最高的消息名称和参数。如果消息队列中没有消息,输出“EMPTY QUEUE!”。对于PUT指令没有输出。
测试用例:
输入 | 输出
9 | msg2
PUT msg1 5 | msg3
PUT msg2 4 | msg4
GET | msg1
PUT msg3 2 | EMPTY QUEUE!
PUT msg4 4
GET
GET
GET
GET
1 | EMPTY QUEUE!
GET
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MaxN 100001typedef struct Node { char arr[11]; int priority;} *PNode;typedef struct Queue { struct Node command[MaxN]; int size;} *PQueue;int N;PQueue init();void modify(PQueue queue);void add(PQueue queue, char tc[], int ti);int delete(PQueue queue, char result[]);int main() { PQueue queue = init(); scanf("%d", &N); char result[11]; char tc[11]; int ti; int i; for (i = 0; i < N; i++) { scanf("%s", tc); if (strcmp(tc, "PUT") == 0) { scanf("%s %d", tc, &ti); add(queue, tc, ti); } else { int x = delete(queue, result); if (x == 0) { printf("EMPTY QUEUE!\n"); } else { printf("%s\n", result); } } } return 0;}PQueue init() { PQueue queue = (PQueue) malloc(sizeof(struct Queue)); queue->size = 0; return queue;}void modify(PQueue queue) { int n = queue->size; if (n == 1) { return; } int i; for (i = n / 2; i >= 1; i--) { int j = i * 2; if (j + 1 < n) { if (queue->command[j].priority > queue->command[j + 1].priority) { j++; } } if (queue->command[i].priority > queue->command[j].priority) { char tc[11]; int ti; ti = queue->command[i].priority; strcpy(tc, queue->command[i].arr); queue->command[i].priority = queue->command[j].priority; strcpy(queue->command[i].arr, queue->command[j].arr); queue->command[j].priority = ti; strcpy(queue->command[j].arr, tc); } }}void add(PQueue queue, char tc[], int ti) { queue->size ++; queue->command[queue->size].priority = ti; strcpy(queue->command[queue->size].arr, tc); modify(queue);}int delete(PQueue queue, char result[]) { if (queue->size == 0) { return 0; } strcpy(result, queue->command[1].arr); strcpy(queue->command[1].arr, queue->command[queue->size].arr); queue->command[1].priority = queue->command[queue->size].priority; queue->size--; modify(queue); return 1;}
阅读全文
0 0
- 《数据结构学习与实验指导》4-4:Windows消息队列
- 《数据结构学习与实验指导》3-8:堆栈模拟队列
- <数据结构学习与实验指导>3-3银行业务队列模拟/3-4一元多项式的乘法与加法运算
- 《数据结构学习与实验指导》4-1:还原二叉树
- 《数据结构学习与实验指导》4-2:树种统计
- 《数据结构学习与实验指导》4-3:朋友圈
- 《数据结构学习与实验指导》4-5:家谱处理
- 《数据结构学习与实验指导》4-6:搜索树判断
- 《数据结构学习与实验指导》4-7:修理牧场
- 《数据结构学习与实验指导》4-8:目录树
- 《数据结构学习与实验指导》4-9:笛卡尔树
- 《数据结构学习与实验指导》3-9队列中的元素排序
- 《数据结构学习与实验指导》3-3:银行业务队列简单模拟
- 《数据结构学习与实验指导》3-9:队列中的元素排序
- 《数据结构学习与实验指导》3-4:一元多项式的乘法与加法运算
- <数据结构学习与实验指导>2-4递增链表的插入
- 《数据结构学习与实验指导》2-4:递增链表的插入
- 《数据结构学习与实验指导》5-4:基于词频的文件相似度
- windows中的eclipse工程在Ubuntu中打开出现中文乱码
- solrcore的schema.xml
- Genymotion unfortunately has stopped
- Codeforces 821D Okabe and City 题解
- Why does MariaDB 10.2 use InnoDB instead of XtraDB?
- 《数据结构学习与实验指导》4-4:Windows消息队列
- DCMTK学习之无法解析的外部符号 Netbios dcmdata.lib
- Python 解决 :NameError: name 'reload' is not defined 问题
- C++——通过域名获取ip
- 创建和销毁对象
- eclipse 安装springide插件
- 欢迎使用CSDN-markdown编辑器
- 比特位操作——更新二进制
- 接着昨晚的写。。。