3.5离散时间模拟

来源:互联网 发布:linux 运行脚本 编辑:程序博客网 时间:2024/06/05 15:43

        在日常生活中,我们经常会遇到许多为了公共秩序而需要排队的情景。这样一类活动中模拟程序通常需要用到队列和线性表之类的数据结构,因此是队列的典型应用之一。

例如银行业务的模拟程序:

         假设某银行有4个窗口对外接待客户,由于每个窗口每次只能服务一个客户,所以当人多的时候所有窗口都有人的时候,新来的客户需要排队等候;如果4个窗口中有至少有一个是没人的那么客户来就可以办理业务。

          现在需要编制一个程序来模拟这种业务活动的计算,并计算出一天中客户在银行办理业务需要的平均时间(包括等待时间)。为了计算这个时间,我们需要知道客户到达的时间和离开的时间。模拟程序中需要的数据结构是队列,需要4个队列分别表示4个窗口排队的情况,队列中客户的主要信息是客户的达到时间和客户办理事务所需时间。

         任何时刻即将发生的事件只有下列5中可能:

         1.新客户到达;2.一号窗口客户离开;3.二号窗口客户离开;4.三号窗口客户离开;5。四号窗口客户离开。


        表示5中事件的事件的有序链表的元素类型定义如下:

         typedef  struct{

                        int  OccurTime;               //事件发生时间

                        int  NType;                       //事件类型,上述5种的一种

         }Event,ElemType;                   //Event表示事件类型;ElemType表示有序链表的数据元素类型


         4个队列的数据元素类型定义如下:

          typedef  struct{

                         int  ArrivalTime;                 //到达时间

                         int  Duration;                     //办理事务所需时间

          }QElemType;                                //队列的数据元素类型


在上述定义的数据结构下实现该模拟程序大致如下:

         EvenList  ev;                           //事件表(5中事件的线性表?)

         Event       en;                          //事件

         LinkQueue     q[5];                //4个客户队列

         QElemType   customer;      //客户记录(也就是队列的数据元素类型)

         int TotalTime,CustomerNum;   






原创粉丝点击