#头歌 算法 应用经典二叉树编程-Windows Message Queue(中文版)

第1关:Windows Message Queue(中文版)

题目描述

消息队列是 windows 系统的基础。对于每个进程,系统维护一个消息队列。如果这个过程发生了一些事情,比如鼠标点击、文本更改,系统将向队列添加一条消息。同时,如果队列不为空,进程将根据优先级值从队列中获取消息。注意,优先级越低,优先级越高。在这个问题中,要求您模拟消息队列,以便将消息放入消息队列并从消息队列获取消息。

输入格式

输入中只有一个测试用例。每一行都是一个命令,GETPUT ,意思是获取消息或放置消息。如果命令是PUT,则有一个字符串表示消息名称,两个整数表示参数和优先级。最多有 60000 个命令。请注意,一条消息可以出现两次或两次以上,如果两条消息具有相同的优先级,则最先出现的消息将首先被处理。FIFO 优先级相同。)处理到文件结束。

输出格式

对于每个 GET 命令,输出从消息队列中获得的命令,并将名称和参数放在一行中。如果队列中没有消息,则输出 EMPTY queue !PUT 命令没有输出。

输入输出样例

输入
 
  1. GET
  2. PUT msg1 10 5
  3. PUT msg2 10 4
  4. GET
  5. GET
  6. GET
输出
 
  1. EMPTY QUEUE!
  2. msg2 10
  3. msg1 10
  4. EMPTY QUEUE!

截止后通关代码

 #include<iostream>

#include<cstdio>

#include<cstring>

#include<cmath>

#include<queue>

#include<stack>

#include<algorithm>

using namespace std;


 

struct node

{

    char str[50];

    int k;

    int num;

    int id;

    friend bool operator<(node a,node b )

    {

        if(a.id !=b.id )

        return a.id>b.id;

        else

        return a.num >b.num ;    

    }

}dp;

char s[10];

priority_queue<node>qu;

int main()

{

int num=1;

    while(scanf("%s",s)!=EOF)

    {

        if(s[0]=='G')

        {

            if(!qu.empty())

            {

                node s1;

                s1=qu.top();

                printf("%s %d\n",s1.str,s1.k);

                qu.pop();

            }

            else

            {

                printf("EMPTY QUEUE!\n");

            }

        }

        else

        {

            node z;

            z.num =num++;

            scanf("%s %d %d",z.str,&z.k,&z.id );

            qu.push(z);

        }

    }



 

    return 0;

}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值