7-26 Windows消息队列
生活随笔
收集整理的這篇文章主要介紹了
7-26 Windows消息队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
7-26 Windows消息隊列(25 分)
消息隊列是Windows系統的基礎。對于每個進程,系統維護一個消息隊列。如果在進程中有特定事件發(fā)生,如點擊鼠標、文字改變等,系統將把這個消息加到隊列當中。同時,如果隊列不是空的,這一進程循環(huán)地從隊列中按照優(yōu)先級獲取消息。請注意優(yōu)先級值低意味著優(yōu)先級高。請編輯程序模擬消息隊列,將消息加到隊列中以及從隊列中獲取消息。
輸入格式:
輸入首先給出正整數N(≤10?5??),隨后N行,每行給出一個指令——GET或PUT,分別表示從隊列中取出消息或將消息添加到隊列中。如果指令是PUT,后面就有一個消息名稱、以及一個正整數表示消息的優(yōu)先級,此數越小表示優(yōu)先級越高。消息名稱是長度不超過10個字符且不含空格的字符串;題目保證隊列中消息的優(yōu)先級無重復,且輸入至少有一個GET。
輸出格式:
對于每個GET指令,在一行中輸出消息隊列中優(yōu)先級最高的消息的名稱和參數。如果消息隊列中沒有消息,輸出EMPTY QUEUE!。對于PUT指令則沒有輸出。
輸入樣例:
9 PUT msg1 5 PUT msg2 4 GET PUT msg3 2 PUT msg4 4 GET GET GET GET輸出樣例:
msg2 msg3 msg4 msg1 EMPTY QUEUE!思路:大家好好吃飯,不要撐著,也不要餓著。完了,欠的題有點兒多了?
來補題了,這個題用優(yōu)先隊列的話很容易就能通過實例,但是在第三個測試點運行超時,然后把string改成了char[]就AC了
注意用char時空間不要開太大,第三個測試點也會顯示運行超時。
#include<queue> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream> using namespace std; typedef struct Node{char name[19];int rank;friend bool operator <(const Node &a, const Node &b){return a.rank > b.rank;} }Node; int main() {priority_queue<Node>que;int n; cin >> n;if (n <= 0)return 0;while (n--){char temp[19];//cin >> temp;scanf("%s", temp);if (strcmp(temp, "PUT") == 0){Node a;//cin >> a.name >> a.rank;scanf("%s%d", a.name, &a.rank);que.push(a);}else {if (!que.empty()){cout << que.top().name << endl;que.pop();}else cout << "EMPTY QUEUE!" << endl;}}return 0; }
?
?轉載于:https://www.cnblogs.com/zengguoqiang/p/8481303.html
總結
以上是生活随笔為你收集整理的7-26 Windows消息队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git 中文教程
- 下一篇: 2018.2.28(延迟加载和缓存)