攻坚实验三银行业务队列简单模拟.docx

上传人:b****6 文档编号:3406282 上传时间:2022-11-22 格式:DOCX 页数:8 大小:172.91KB
下载 相关 举报
攻坚实验三银行业务队列简单模拟.docx_第1页
第1页 / 共8页
攻坚实验三银行业务队列简单模拟.docx_第2页
第2页 / 共8页
攻坚实验三银行业务队列简单模拟.docx_第3页
第3页 / 共8页
攻坚实验三银行业务队列简单模拟.docx_第4页
第4页 / 共8页
攻坚实验三银行业务队列简单模拟.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

攻坚实验三银行业务队列简单模拟.docx

《攻坚实验三银行业务队列简单模拟.docx》由会员分享,可在线阅读,更多相关《攻坚实验三银行业务队列简单模拟.docx(8页珍藏版)》请在冰豆网上搜索。

攻坚实验三银行业务队列简单模拟.docx

攻坚实验三银行业务队列简单模拟

攻坚实验三 银行业务队列简单模拟

一、实验目的

熟练掌握队列的基本操作,理解队列的应用。

二、实验内容

设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍---即当A窗口处理完2个顾客时,B窗口处理完一个顾客。

给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。

假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。

三、实验要求

1.输入说明:

输入为一行正整数,其中第1个数字N(N<=1000)为顾客总数,后面跟着N位顾客的编号。

编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。

数字间以空格分隔。

2.输出说明:

按业务处理完成的顺序输出顾客的编号。

数字间以空格分隔,但最后一个编号后不能有多余的空格。

3.测试用例:

序号

输入

输出

说明

1

821394111315

13291141315

正常测试,A窗口人多

2

821394111216

13291141216

正常测试,B窗口人多

3

16

6

最小N

4

1000个顾客的随机序列

最大N

 

 

 

 

四、实验分析

(1)问题分析

首先需要针对A和B业务设计两个循环队列,分别处理两类业务请求;然后根据输入序列整数的奇偶性将各个整数分配到这两个队列中。

另外,需要设计针对两个队列处理过程的流程,这是一个循环。

在循环中,先从A队列中输出两个元素,然后再从B队列中输出一个元素。

当发现某一个队列中的元素为空时,输出另一个队列中的所有元素。

(2)实现要点

采用统一的循环队列函数处理两个队列的操作:

注意对队列满、空情况的判断。

五、主要仪器及耗材

计算机及VC6软件

六、实验参考代码

七、实验注意事项

1.应分析源程序,并注意运行结果是否为预期结果。

2.注意大小写及英文字符(ASCII码)

八、思考题

1.本题只是个简单的模拟,实际银行的业务处理会更加复杂,队列的使用是很有必要的。

对于本题,可以再进一步思考以下问题:

(1)本题的顾客请求序列是程序运行时输入的,能不能使用C语言提供的随机函数(rand(),srand()等)生成符合某种要求的随机序列进行顾客请求的随机模拟?

(2)如果将A队列和B队列的处理速度比NA:

NB(本题NA=2,NB=1)作为变量在程序运行时作为参数输入,该如何修改代码?

#include

#definemaxsize1000

#defineERROR-1

typedefstruct

{

intcustomer[maxsize];

intrear;

intfront;

}Queue;

voidinitqueue(Queue*ptrQ)//初始化空队列

{

 

ptrQ->rear=ptrQ->front=0;

}

intIsemptyQ(Queue*ptrQ,inte)//判断队列是否为空

{

{

intflag;

if(ptrQ->front==ptrQ->rear)

flag=1;

else

flag=0;

returnflag;

}

ptrQ->rear=(ptrQ->rear+1)%maxsize;

ptrQ->customer[ptrQ->rear]=e;

}

voidaddQ(Queue*ptrQ,inte)//将元素e插入到队列ptrQ中

{

if((ptrQ->rear+1)%maxsize==ptrQ->front)

{

printf("队列满!

");

return;

}

ptrQ->rear=(ptrQ->rear+1)%maxsize;

ptrQ->customer[ptrQ->rear]=e;

}

intdeleteQ(Queue*ptrQ)//从队列中删除队头并返回

{

if(ptrQ->front==ptrQ->rear)

{

printf("队列空!

");

returnERROR;

}

else

{

ptrQ->front=(ptrQ->front+1)%maxsize;

returnptrQ->customer[ptrQ->front];

}

}

intmain()

{

intN,i,cur,flag;

QueueA,B;

//初始化两个队列

initqueue(&A);

initqueue(&B);

scanf("%d",&N);

for(i=0;i

{

scanf("%d",&cur);

if(cur%2)

addQ(&A,cur);

else

addQ(&B,cur);

}

 

flag=0;//标记第1个顾客尚未输出

while(!

IsemptyQ(&A,int())&&!

IsemptyQ(&B,int()))

{

if(!

flag)//第一个顾客输出后无空格

{

printf("%d",deleteQ(&A));

flag=1;

}

else

printf("%d",deleteQ(&A));

if(!

IsemptyQ(&A,int()))  printf("%d",deleteQ(&A));

printf("%d",deleteQ(&B));

}

while(!

IsemptyQ(&A,int()))//A队列不空,B队列空

{

if(!

flag)//第一个顾客输出后无空格

{

printf("%d",deleteQ(&A));

flag=1;

}

else

printf("%d",deleteQ(&A));

}

while(!

IsemptyQ(&B,int()))//B队列不空,A队列空

{

if(!

flag)//第一个顾客输出后无空格

{

printf("%d",deleteQ(&B));

flag=1;

}

else

printf("%d",deleteQ(&B));

}

printf("\n");

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1