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

2019-08-01 22:38

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

一、 实验目的

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

二、 实验内容

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

三、 实验要求

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

2.输出说明:按业务处理完成的顺序输出顾客的编号。数字间以空格分隔,但最后一个编号后不能有多余的空格。 3.测试用例: 序号 输入 1 8 2 1 3 9 4 11 13 15 2 8 2 1 3 9 4 11 12 16 3 1 6 4 1000个顾客的随机序列 输出 1 3 2 9 11 4 13 15 1 3 2 9 11 4 12 16 6 略 说明 正常测试,A窗口人多 正常测试,B窗口人多 最小N 最大N 四、 实验分析

(1)问题分析

首先需要针对A和B业务设计两个循环队列,分别处理两类业务请求;然后根据输入序列整数的奇偶性将各个整数分配到这两个队列中。另外,需要设计针对两个队列处理过程的流程,这是一个循环。在循环中,先从A队列中输出两个元素,然后再从B队列中输出一个元素。当发现某一个队列中的元素为空时,输出另一个队列中的所有元素。

(2)实现要点

采用统一的循环队列函数处理两个队列的操作:注意对队列满、空情况的判断。

五、 主要仪器及耗材

计算机及VC6软件

六、 实验参考代码

#include #define maxsize 1000 #define ERROR -1 typedef struct { int customer[maxsize]; int rear; int front; }Queue; void initqueue(Queue *ptrQ)//初始化空队列 { ptrQ->rear=ptrQ->front=0; } int IsemptyQ(Queue *ptrQ)//判断队列是否为空 { int flag; if(ptrQ->front==ptrQ->rear) flag=1; else flag=0; return flag; } ptrQ->rear=(ptrQ->rear+1)%maxsize; ptrQ->customer[ptrQ->rear]=e; }

void addQ(Queue *ptrQ,int e)//将元素e插入到队列ptrQ中 { if((ptrQ->rear+1)%maxsize==ptrQ->front) { printf(\队列满!\ return; } ptrQ->rear=(ptrQ->rear+1)%maxsize; ptrQ->customer[ptrQ->rear]=e; } int deleteQ(Queue *ptrQ)//从队列中删除队头并返回 { if(ptrQ->front==ptrQ->rear) { printf(\队列空!\ return ERROR; } else { ptrQ->front=(ptrQ->front+1)%maxsize; return ptrQ->customer[ptrQ->front]; } } int main() { int N,i,cur,flag; Queue A,B; //初始化两个队列 initqueue(&A); initqueue(&B); scanf(\ for(i=0;i

} flag=0;//标记第1个顾客尚未输出 while(!IsemptyQ(&A) && !IsemptyQ(&B)) { if(!flag)//第一个顾客输出后无空格 { printf(\ flag=1; } else printf(\ if(!IsemptyQ(&A)) printf(\ printf(\} while(!IsemptyQ(&A))//A队列不空,B队列空 { if(!flag)//第一个顾客输出后无空格 { printf(\ flag=1; } else printf(\} while(!IsemptyQ(&B))//B队列不空,A队列空 { if(!flag)//第一个顾客输出后无空格 { printf(\ flag=1; } else printf(\} printf(\return 0;

七、 实验注意事项

1.应分析源程序,并注意运行结果是否为预期结果。 2.注意大小写及英文字符(ASCII码)

八、 思考题

1.本题只是个简单的模拟,实际银行的业务处理会更加复杂,队列的使用是很有必要的。对于本题,可以再进一步思考以下问题:

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

(2)如果将A队列和B队列的处理速度比NA:NB(本题NA=2,NB=1)作为变量在程序运行时作为参数输入,该如何修改代码?

#include #define maxsize 1000 #define ERROR -1

typedef struct { }Queue;

void initqueue(Queue *ptrQ)//初始化空队列 { }

ptrQ->rear=ptrQ->front=0; int customer[maxsize]; int rear; int front;


攻坚实验三银行业务队列简单模拟.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:离散数学课后练习1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: