您好,欢迎访问三七文档
LOGO指导教师:于江德数据结构答辩ppt班级:物联网工程一班组员:郭珂珂李龙孙贝贝齐佳佳项目名称:用队列模拟一队通过丹尼斯超市交款处的顾客流项目简介:使用一个队列模拟一队通过丹尼斯超市交款处的顾客流。为了创建这个模拟,我们必须模拟排队时间和顾客通过流。我们可以通过一个循环模拟时间,每通过一个顾客代表一定的时间间隔——例如,一分钟。我们可以使用一个队列模拟顾客流,队列中的一个数据项代表一位顾客。为了完成这个模拟,我们需要知道顾客加入交款处队列的频率、交款结算服务情况和离开的频率问题分析:为了创建这个模拟系统,我们必须模拟排队时间和顾客通过流,在一定时间更新下列信息,即每一次通过循环。·完成交款服务的总顾客数·这些顾客花费在排队等待的时间总和·顾客花费在排队等待的最长时间一项目的基本信息二问题的分析第一部分我们可以通过一个循环模拟时间,每通过一个顾客代表一定的时间间隔。我们可以使用一个队列模拟顾客流,队列中的一个数据项代表一位顾客。因此,我们需要知道顾客加入交款处队列的频率、交款结算服务情况和离开的频率。在这里,我们调用了srand()函数来产生随机数,系统在调用rand()之前都会自动调用srand(),如果用户在rand()之前曾调用过srand()给参数seed指定了一个值,那么rand()就会将seed的值作为产生伪随机数的初始值;而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始值。如果给了一个定值,那么每次rand()产生的随机数序列都是一样的。二问题的分析所以为了避免上述情况的发生我们通常用srand((unsigned)time(0))或者srand((unsigned)time(NULL))来产生种子。如果仍然觉得时间间隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)后面乘上某个合适的整数。例如srand((unsigned)time(NULL)*10).功能模块及数据结构描述功能模块:StatusOpenForDay(EventList&ev,QCuEventen,QCupp&q);//开门StatusCustomerArrived(EventList&ev,QCupp&q,QCuEventen);//顾客到达StatusCustomerDeparture(EventList&ev,QCupp&q,QCuEventen);//顾客离开voidCloseForDay();//关门StatusOrderInser(EventList&ev,QCuEventen);//按时间顺序插入事件到事件表intQLength(QCustomerpqn);//求窗口队列长度intMinCuQueue(QCuppq);//求队最短的窗口功能模块及数据结构描述StatusDelFirstEvent(EventList&ev);//删除事件表中的第一个事件StatusInitCuQueue(QCustomerp&qn);//初始化窗口队列StatusEnCuQueue(QCustomerp&qn,QEptrQ);//进入队列StatusDeCuQueue(QCustomerp&qn,QCuElem&Q);//删除队列中的元素StatusGetQHead(QCustomerpqn,QCuElem&Q);//获得队列中的第一个元素StatusDestoryQueue(QCustomerpqn);//销毁队列voidPrint_QStatus(QCustomerpQCu[]);//打印队列长度voidBank_SimulationFunc();voidtest(charstr[]);typedefintStatus;//自定义数据类型typedefstructQCuEvent//事件和事件表{intOccurTime;//事件发生时刻intNType;//事件类型,0表示到达事件,1至4表示四个窗口的离开事件structQCuEvent*next;//}QCuEvent,*EventList;//事件类型typedefstructQCuElem//窗口前队列元素结构模块结构模块{intArrivalTime;//到达时间intDuration;//办理事务所需时间structQCuElem*next;//}QCuElem,*QEptr;//队列的数据元素类型,queue队列指针typedefstruct//窗口队列指针{QEptrfront;//队头指针QEptrrear;//队尾指针}QCustomerp,*QCupp;三.主要算法流程描述及部分核心算法算法流程描述:部分核心算法//向事件中插入事件StatusOrderInser(EventList&ev,QCuEventen)//队列的插入{EventListentemp,qtemp;entemp=(EventList)malloc(sizeof(QCuEvent));//为时间表分配存储空间entemp-OccurTime=en.OccurTime;//???????????entemp-NType=en.NType;entemp-next=NULL;if(!ev-next){ev-next=entemp;returnOK;}qtemp=ev;while(qtemp-next&&qtemp-next-OccurTimeen.OccurTime){核心算法qtemp=qtemp-next;}entemp-next=qtemp-next;qtemp-next=entemp;returnOK;}核心算法//删除事件表中的第一个事件StatusDelFirstEvent(EventList&ev){EventListp;p=ev-next;ev-next=p-next;free(p);returnOK;}//求窗口队列长度intQLength(QCustomerpqn){QEptrqtemp;inti=0;//计数器,计算队列的长度qtemp=qn.front-next;while(qtemp){qtemp=qtemp-next;i++;//对列长度加1}returni;//返回i值,队列长度}核心算法//求队最短的窗口intMinCuQueue(QCuppq){inti;intmin;for(i=1,min=1;i=windowsnum;i++){min=QLength(q[min])=QLength(q[i])?min:i;}returnmin;}四.系统使用说明打开vc6.0,在win32下建立一个工程,打开源代码,进入以下界面:四系统的使用说明。四系统的使用说明五.课程实践总结通过这次课程实践,加强了对数据结构知识的巩固,熟练掌握了对线性表、栈、队列、数组等知识点的运用,通过集体努力完成了代码编写与运行,获得了成就感也加深了学习数据结构的兴趣,知道了数据结构的重要性。另外,在课外实践的过程中发挥了团队合作精神,提高了团队合作能力。
本文标题:模拟超市系统
链接地址:https://www.777doc.com/doc-2308496 .html