论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> 复习资料 >> IT正文
《数据结构(C++)》学习辅导系列:队列应用
 作者:佚名     2007-3-15 14:57:12        来源:不详  浏览次数:

【简 介】
  我看的两本教科书(《数据结构(C语言版)》还有这本黄皮书)都是以这个讲解队列应用的,而且都是银行营业模拟(太没新意了)。 细比较,这两本书模拟的银行营业的方式还是不同的。1997版的《数据结构(C语言版)》的银行还是老式的营业模式(毕竟是1997年的事了),现在的很多地方还是这种营业模式——几个窗口同时排队。这种方式其实不太合理。。。。。。


  我看的两本教科书(《数据结构(C语言版)》还有这本黄皮书)都是以这个讲解队列应用的,而且都是银行营业模拟(太没新意了)。细比较,这两本书模拟的银行营业的方式还是不同的。1997版的《数据结构(C语言版)》的银行还是老式的营业模式(毕竟是1997年的事了),现在的很多地方还是这种营业模式——几个窗口同时排队。这种方式其实不太合理,经常会出现先来的还没有后来的先办理业务(常常前面一个人磨磨蹭蹭,别的队越来越短,让你恨不得把前面那人干掉)。1999版的这本黄皮书的银行改成了一种挂牌的营业方式,每个来到的顾客发一个号码,如果哪个柜台空闲了,就叫号码最靠前的顾客来办理业务;如果同时几个柜台空闲,就按照一种法则来决定这几个柜台叫号的顺序(最简单的是按柜台号码顺序)。这样,就能保证顾客按照先来后到的顺序接受服务——因为大家排在一个队里。这样的营业模式我在北京的西直门工商银行见过,应该说这是比较合理的一种营业模式。不过,在本文中最重要的是,这样的营业模式比较好模拟(一个队列总比N个队列好操作)。
  原书的这部分太难看了,我看的晕晕的,我也不知道按照原书的方法能不能做出来,因为我没看懂(旁白:靠,你小子这样还来现眼)。我按照实际情况模拟,实现如下:
  #ifndef Simulation_H
  #define Simulation_H
  #include
  #include
  #include
  
  class Teller
  {
  public:
   int totalCustomerCount;
   int totalServiceTime;
   int finishServiceTime;
   Teller() :totalCustomerCount(0), totalServiceTime(0),
   finishServiceTime(0) {}
  };
  //#define PRINTPROCESS
  class Simulation
  {
  public:
   Simulation()
   {
   cout << endl << "输入模拟参数" << endl;
   cout << "柜台数量:"; cin >> tellerNum;
   cout << "营业时间:"; cin >> simuTime;
   cout << "两个顾客来到的最小间隔时间:"; cin >> arrivalLow;
   cout << "两个顾客来到的最大间隔时间:"; cin >> arrivalHigh;
   cout << "柜台服务最短时间:"; cin >> serviceLow;
   cout << "柜台服务最长时间:"; cin >> serviceHigh;
   arrivalRange = arrivalHigh - arrivalLow + 1;
   serviceRange = serviceHigh - serviceLow + 1;
   srand((unsigned)time(NULL));
   }
  
   Simulation(int tellerNum, int simuTime, int arrivalLow, int arrivalHigh, int serviceLow, int serviceHigh)
   : tellerNum(tellerNum), simuTime(simuTime), arrivalLow(arrivalLow), arrivalHigh(arrivalHigh),
   serviceLow(serviceLow), serviceHigh(serviceHigh),
   arrivalRange(arrivalHigh - arrivalLow + 1), serviceRange(serviceHigh - serviceLow + 1)
   { srand((unsigned)time(NULL)); }
   void Initialize()
   {
   curTime = nextTime = 0;
   customerNum = customerTime = 0;
   for (int i = 1; i <= tellerNum; i++)
   {
   tellers[i].totalCustomerCount = 0;
   tellers[i].totalServiceTime = 0;
   tellers[i].finishServiceTime = 0;
   }
   customer.MakeEmpty();
   }
  
   void Run()
   {
   Initialize();
   NextArrived();
  #ifdef PRINTPROCESS
   cout << endl;
   cout << "tellerID";
   for (int k = 1; k <= tellerNum; k++) cout << "\tTELLER " << k;
   cout << endl;
  #endif
   for (curTime = 0; curTime <= simuTime; curTime++)
   {
   if (curTime >= nextTime)
   {
   CustomerArrived();
   NextArrived();
   }
  #ifdef PRINTPROCESS
   cout << "Time: " << curTime << " ";
  #endif
   for (int i = 1; i <= tellerNum; i++)
   {
   if (tellers[i].finishServiceTime < curTime) tellersi].finishServiceTime = curTime;
   if (tellers[i].finishServiceTime == curTime && !customer.IsEmpty())
   {
   int t = NextService();
  #ifdef PRINTPROCESS
   cout << '\t' << customerNum + 1 << '(' << customer.GetFront() << ',' << t << ')';
  #endif
   CustomerDeparture();
   tellers[i].totalCustomerCount++;
   tellers[i].totalServiceTime += t;
   tellers[i].finishServiceTime += t;
  
   }
  #ifdef PRINTPROCESS
   else cout << "\t ";
  #endif
   }
  #ifdef PRINTPROCESS
   cout << endl;
  #endif
   }
   PrintResult();
   }
  
   void PtintSimuPara()
   {
   cout << endl << "模拟参数" << endl;
   cout << "柜台数量: " << tellerNum << "\t营业时间:" << simuTime << endl;
   cout << "两个顾客来到的最小间隔时间:" << arrivalLow << endl;
   cout << "两个顾客来到的最大间隔时间:" << arrivalHigh << endl;;
   cout << "柜台服务最短时间:" << serviceLow << endl;
   cout << "柜台服务最长时间:" << serviceHigh << endl;
   }

[1] [2] 下一页

责任编辑:lss
  相关新闻
程序员考试:数据结构笔记
《数据结构》(严蔚民)配套纯C代码下载
数据库之——Hibernate实现级联删除
数据库系统工程师:数据库原理各章节简答题总结
2006年9月23日计算机等级考试三级数据库标准试卷
【JAVA基础】JDBC连接DB2数据库详解
Oracle下调数据库许可价格 以适应多芯CPU
Oracle数据仓库查询优化技术
2006年软考程序员数据结构复习笔记
如何有效管理Exchange的数据管理
三级数据库备考经验——三级,并不难
程序员考试:数据结构笔记
《数据结构》(严蔚民)配套纯C代码下载
计算机硬件\数据结构\标准化考试模块指导
2006年软考程序员数据结构复习笔记
《数据结构(C++)》学习辅导系列:序言
《数据结构(C++)》学习辅导系列:栈和队列
数据库系统工程师:NBU备份ORACLE时Code 29错误
数据库系统工程师:数据库原理各章节简答题总结
2006年9月23日计算机等级考试三级数据库标准试卷
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号