博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构...
阅读量:6075 次
发布时间:2019-06-20

本文共 2722 字,大约阅读时间需要 9 分钟。

题目:

7-1 银行业务队列简单模拟 (30 分)
 

设某银行有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

分析: 经详读题目及例题可知,银行业务队列简单模拟问题可以简单看作 a和b 两个队列的问题:每当a队列输出两个元素后,b队列输出一个元素。

代码:
#include
#include
#include
using namespace std;typedef int datatype; //定义结点 typedef struct Q_node{ datatype data; struct Q_node *next;}node;//定义队列的链表结构 typedef struct queue{ node *front;//定义队首与队尾指针 node *rear;}queue;//初始化队列void initial(queue *qu){ qu->front = new node;//申请一个结点作为头节点 qu->front->next = NULL; qu->rear = qu->front;}//判断队列是否为空//0为空,1为非空 int empty(queue *qu){ if(qu->front == qu->rear){ return 0; }else return 1; }//删除链式队列中的结点 void dele(queue *qu, datatype *x){ if(empty(qu) == 0){ //cout<<"队列为空!"<
front->next; qu->front->next = p->next; if(qu->rear == p){
//除头节点外只有一个结点的情况 qu->rear = qu->front;//表示空链式队列 } *x = p->data; free(p);//释放空间 p = NULL; }} //输出链式队列中结点的值void display(queue *qu, int &flag){ datatype x; if(empty(qu) == 0){ // cout<<"The queue is empty!"; flag = 0; //当队列为空时,状态flag=0; return; }else{ dele(qu, &x);//输出的值x由dele(queue *qu, datatype *x)函数返回 flag = 1; cout<
data = x; pNew->next = NULL; qu->rear->next = pNew; qu->rear = pNew; } int main(){ int flag = 1;//用flag来标志元素出队时是否成功 int count=0; queue a,b;//定义队列a,b initial(&a);//初始化队列a,b initial(&b); int i,n,x; cin>>n;//输入个数 for(i=0; i
>x; if(x%2 == 0){ //若x为偶数,入b队 enter(&b, x); }else enter(&a, x);//若x为奇数,入a队 } /*每次display队列a或b中的元素后,判断队列 a或b是否为空 若 a队列为空则直接display b队列,反之亦然 */ for(i=0; i

 

 


编程中遇到的困难: 1. 输出元素后判断是否需要输出空格的情况比较复杂:        (1)当a队列空而b队列非空,b队列输出最后一个元素后,不输出空格        (2)当a队列空而b队列非空,b队列输出最后一个元素后,不输出空格        (3)当没有成功display时,不输出空格    解决方法:定义一个flag变量,输出空格时flag = 1,不输出时flag = 0。通过flag值判断是否输出空格。 2. a队列和b队列中元素个数的不同而导致多种情况(复杂算法可能造成运行超时):       (1) 仅有a队列中有元素       (2) 仅有b队列中有元素       (3) a队列中元素比b队列中元素多(即输入样例)       (4) a队列中元素比b队列中元素少(该种情况需特别留意)    解决方法:多方面考虑,找到一个通用的较好算法。

总结: 1. 在入门者初学中,学习由链表搭建的数据结构都比较困难,但是学习的过程总需要走出安逸圈,选择一个不熟悉的知识点不断巩固,才能有效地为日后学习打下基础。 2. 一个看似简单的问题(尤其是实际问题),往往有多种需要注意和考虑的情况

参考资料: https://blog.csdn.net/minamiximawa/article/details/81559066

转载于:https://www.cnblogs.com/yi2105/p/10618323.html

你可能感兴趣的文章
ThreadPoolExecutor线程池运行机制分析-线程复用原理
查看>>
React Native 极光推送填坑(ios)
查看>>
Terratest:一个用于自动化基础设施测试的开源Go库
查看>>
修改Windows远程终端默认端口,让服务器更安全
查看>>
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
Excuse me?这个前端面试在搞事!
查看>>
C#数据采集类
查看>>
quicksort
查看>>
【BZOJ2019】nim
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>