您的位置:首页 > 其它

银行业务队列简单模拟

2018-01-06 13:40 423 查看
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。


输入格式:

输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。


输出格式:

按业务处理完成的顺序输出顾客的编号。数字间以空格分隔,但最后一个编号后不能有多余的空格。


输入样例:

8 2 1 3 9 4 11 13 15


输出样例:

1 3 2 9 11 4 13 15

解析:两个数组容易解决, 但是是课程设计,考查队列的使用,因此此题中用了队列。

#include<bits/stdc++.h>
#define OVERFLOW -1
#define ERROR 0
#define FALSE 0
#define TRUE 1
#define OK 1
using namespace std;
typedef int Status;
typedef int QElemType;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct Queue
{
QueuePtr front;
QueuePtr rear;
}Queue;
Status InitQueue(Queue &Q)
{
Q.front = (QNode *)malloc(sizeof(QNode));
if(!Q.front) exit(OVERFLOW);
Q.front->next = NULL;
Q.rear = Q.front;
return OK;
}
Status DestroyQueue(Queue &Q)
{
QNode *p = Q.front, *postp;
while(p)
{
postp = p->next;
free(p);
p = postp;
}
Q.front = Q.rear = NULL;
return OK;
}
Status ClearQueue(Queue &Q)
{
QNode *p = Q.front->next;
while(p)
{
QNode *temp = p;
p = p->next;
free(p);
}
Q.rear = Q.front;
Q.rear->next = NULL;
}
Status EmptyQueue(Queue Q)
{
if(Q.front == Q.rear)
return TRUE;
return FALSE;
}
int QueueLength(Queue Q)
{
int len = 0;
QNode *temp = Q.front->next;
while(temp)
{
++len;
temp = temp->next;
}
return len;
}
Status GetHead(Queue Q, QElemType &e)
{
if(Q.front = Q.rear)
return ERROR;
e = Q.front->next->data;
return OK;
}
Status EnQueue(Queue &Q, QElemType e)
{
QueuePtr p;
p = (QNode *)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data = e; p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
Status DeQueue(Queue &Q, QElemType &e)
{
if(Q.front == Q.rear)
return ERROR;
QueuePtr temp = Q.front->next;
e = temp->data;
Q.front->next = temp->next;
if(Q.rear == temp) Q.rear = Q.front;
free(temp);
return OK;
}
int main()
{
Queue Qa, Qb;
InitQueue(Qa);
InitQueue(Qb);
int n, flag = 0;
scanf("%d", &n);
for(int i = 0; i < n; ++i)
{
QElemType temp;
scanf("%d", &temp);
if(temp % 2 == 1)
{
EnQueue(Qa, temp);
}
else
{
EnQueue(Qb, temp);
}
}
for(int i = 0; i <= n; ++i)
{
QElemType temp;
if(!EmptyQueue(Qa))
{
DeQueue(Qa, temp);
if(flag == 0)
printf("%d", temp);
else
printf(" %d", temp);
flag = 1;
}
if(i % 2 == 1 && !EmptyQueue(Qb))
{
DeQueue(Qb, temp);
if(flag == 0)
printf("%d", temp);
else
printf(" %d", temp);
flag = 1;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: