设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍——即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。
# include <stdio.h> # include <malloc.h> typedef struct Node { int data; // 元素数据 struct Node *next; // 链式队列中结点元素的指针 } QNode, *pQNode; typedef struct { pQNode front; // 队列头指针 pQNode rear; // 队列尾指针 }LinkQueue; //初始化队列,Q为待初始化队列 void InitQueue(LinkQueue *Q) { Q->front = Q->rear = (pQNode)malloc(sizeof(QNode)); Q->front->next = NULL; } void AddQ(LinkQueue *Q, int data) { pQNode tmp; tmp = (pQNode)malloc(sizeof(QNode)); tmp->data = data; tmp->next = NULL; Q->rear->next = tmp; Q->rear = tmp; } void printHead(LinkQueue *Q) { pQNode tmp; tmp = Q->front->next; Q->front->next = tmp->next; printf("%d ",tmp->data); free(tmp); } int main() { int tmp,size,i,lenA = 0,lenB = 0; LinkQueue A; LinkQueue B; InitQueue(&A); InitQueue(&B); scanf("%d", &size); for(i = 0;i<size; i++ ) { scanf("%d",&tmp); if(tmp%2) { AddQ(&A, tmp); lenA++; } else { AddQ(&B, tmp); lenB++; } } size = lenA/2 >= lenB ? lenA/2:lenB; for(i = 0;i<size; i++) { if(lenA > 1) { printHead(&A); printHead(&A); lenA-=2; } if(lenA == 1) { printHead(&A); lenA--; } if(lenB> 0) { printHead(&B); lenB--; } } return 0; }