5-2 windows訊息佇列 (25分)
訊息佇列是windows系統的基礎。對於每個程序,系統維護乙個訊息佇列。如果在程序中有特定事件發生,如點選滑鼠、文字改變等,系統將把這個訊息加到佇列當中。同時,如果佇列不是空的,這一程序迴圈地從佇列中按照優先順序獲取訊息。請注意優先順序值低意味著優先順序高。請編輯程式模擬訊息佇列,將訊息加到佇列中以及從佇列中獲取訊息。
輸入首先給出正整數n(\le 10^5≤1
05
),隨後n行,每行給出乙個指令——get
或put
,分別表示從佇列中取出訊息或將訊息新增到佇列中。如果指令是put
,後面就有乙個訊息名稱、以及乙個正整數表示訊息的優先順序,此數越小表示優先順序越高。訊息名稱是長度不超過10個字元且不含空格的字串;題目保證佇列中訊息的優先順序無重複,且輸入至少有乙個get
。
對於每個get
指令,在一行中輸出訊息佇列中優先順序最高的訊息的名稱和引數。如果訊息佇列中沒有訊息,輸出empty
queue!。對於put
指令則沒有輸出。
9
put msg1 5
put msg2 4
getput msg3 2
put msg4 4
getget
getget
msg2
msg3
msg4
msg1
empty queue!
啊哈,建立乙個最小堆,然後瞎搞就好了;
#include #include struct bstq[400040];
int main()
q[i].w=tp;
strcpy(q[i].s,ch);
}else
{if(!size)
puts("empty queue!");
else
{char tt[10];
printf("%s\n",q[1].s);
int temp=q[size].w;
strcpy(tt,q[size--].s);
int child,parent;
for(parent=1;parent*2<=size;parent=child)
{child=parent*2;
if(child!=size&&(q[child+1].w
Windows訊息佇列
輸入首先給出正整數n 1 0 5 隨後n行,每行給出乙個指令 get或put,分別表示從佇列中取出訊息或將訊息新增到佇列中。如果指令是put,後面就有乙個訊息名稱 以及乙個正整數表示訊息的優先順序,此數越小表示優先順序越高。訊息名稱是長度不超過10個字元且不含空格的字串 題目保證佇列中訊息的優先順序...
windows訊息佇列
windows訊息佇列 windows中 佇列訊息和非佇列訊息。訊息佇列由可以分成系統訊息佇列和執行緒訊息佇列。系統訊息佇列由windows維護,執行緒訊息佇列則由每個gui執行緒自己進行維護,僅當執行緒第一次呼叫gdi函式時系統才給執行緒建立乙個訊息佇列,佇列訊息送到系統訊息佇列,然後到執行緒訊息...
windows佇列訊息和非佇列訊息的詳細解釋
我們已經談到過,windows給視窗傳送訊息,這意味著windows呼叫視窗訊息處理程式。但是,windows程式也有乙個訊息迴圈,它呼叫getmessage從訊息佇列中取出訊息,並且呼叫dispatchmessage將訊息傳送給視窗訊息處理程式。那麼,windows程式是依次等待訊息 類似於普通程...