数据结构实验5
7-2 队列应用(蓝桥杯)
CLZ 银行只有两个接待窗口,VIP 窗口和普通窗口,VIP 用户进入 VIP 窗口排队,剩下的进入普通窗口排队。现有 M 次操作,操作有四种类型,如下:
IN name V:表示一名叫 name 的用户到 VIP 窗口排队
OUT V:表示 VIP 窗口队头的用户离开排队
IN name N:表示一名叫 name 的用户到普通窗口排队
OUT N:表示普通窗口队头的用户离开排队
求 M 次操作结束后 VIP 窗口队列和普通窗口队列中的姓名。
输入格式:
第一行是一个整数 M(1≤M≤1000),表示一共有 M 次操作。
第二行到第 M+1 行输入操作,格式如下:
IN name V
OUT V
IN name N
OUT N
输出格式:
输出 M 次操作后 VIP 窗口队列和普通窗口队列中的姓名(从头到尾),先输出 VIP 窗口队列后输出普通窗口队列。
输入样例:
在这里给出一组输入。例如:
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
输出样例:
在这里给出相应的输出。例如:
Adel
CLZ
laozhao
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 1000
typedef struct Queue{
char name[MAX_SIZE][50];
int front,rear;
}Queue;
void initQueue(Queue *q){
q->front=0;
q->rear=0;
}
int isEmpty(Queue *q){
return q->front==q->rear;
}
void enqueue(Queue *q,const char *name){
strcpy(q->name[q->rear],name);
q->rear++;
}
void dequeue(Queue *q){
if(!isEmpty(q)){
q->front++;
}
}
void printQueue(Queue *q){
for(int i=q->front;i<q->rear;i++){
printf("%s\n",q->name[i]);
}
}
int main(){
int M;
scanf("%d",&M);
Queue vipQueue,normalQueue;
initQueue(&vipQueue);
initQueue(&normalQueue);
char operation[50],name[50];
for(int i=0;i<M;i++){
scanf("%s",operation);
if(strcmp(operation,"IN")==0){
scanf("%s",name);
scanf("%s",operation);
if(strcmp(operation,"V")==0){
enqueue(&vipQueue,name);
}
else if(strcmp(operation,"N")==0){
enqueue(&normalQueue,name);
}
}else if(strcmp(operation,"OUT")==0){
scanf("%s",operation);
if(strcmp(operation,"V")==0){
if(!isEmpty(&vipQueue)){
dequeue(&vipQueue);
}
}else if(strcmp(operation,"N")==0){
if(!isEmpty(&normalQueue)){
dequeue(&normalQueue);
}
}
}
}
printQueue(&vipQueue);
printQueue(&normalQueue);
return 0;
}
浙公网安备 33010602011771号