选拔面试问题1 顺序队列

#include<stdio.h>
#include<string.h>
#define MAX 100
//这里MAX 设置的是100人,如果是1000000个人,则大约需要1000000*sizeof(student)个字节的连续空间,
//连续空间需求太多可能会导致分配空间失败,不可行.
//但我们需要将这个顺序处理的方法掌握到,同时会熟练设计此类问题的程序框架 
typedef struct{
    char name[6];
    int rp;
}student;
int main()
{
    freopen("selection.in","r",stdin);
    //freopen("estdout.pc2","w", stdout);
    student queue[MAX]; //这里不用必须使用循环队列 
    int T=2,i,maxrp, front, rear;
    char s[10]; 
    scanf("%d", &T);
    while(T--)
    {   
        front=rear=0;//初始状态,队列为空。
        scanf("%s", s);
        if(strcmp(s,"START")==0)
        {
            front=0;   //队头指针
            rear=0;   //尾指针 
            while(1)    // rear-front 为元素的个数 
            {   
                scanf("%s", s);
                if(strcmp(s,"C")==0)
                    {   scanf("%s%d", queue[rear].name, &queue[rear].rp);
                        rear++;
                    }
                else if(strcmp(s,"G")==0)   
                            front++;    //删除队头元素,但没有判断队列是否有人。                   
                    else if(strcmp(s,"Q")==0)
                            {   
                                if(front<rear) //队列不为空 
                                {
                                    maxrp=0;   //找RP最大值 
                                    for(i=front; i<rear; i++)
                                        if( queue[i].rp>maxrp ) 
                                            maxrp=queue[i].rp;
                                    printf("%d\n", maxrp);
                                }
                                else 
                                    printf("%d\n",-1);


                            }
                            else if(strcmp(s,"END")==0)
                            {   front=rear=0;   //头尾指针为0,清空队列
                                break; 
                            }

            }
        }
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值