




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程实验报告姓名:陈东学号:070612146一、【实验目的】3二、【问题描述】3三、【基本要求】3四、【实验环境】3五、【测试数据及其结果】 3六、【实验源代码】5一、【实验目的】帮助学生熟练掌握线性表的基木操作在链表结构中的实现,熟练进行各种链表的操作和应用。二、【问题描述】设计一个电梯模拟系统。这是一个离散的模拟程序,因为电梯系统是乘客和 电梯等“活动体”够成的集合,虽然他们彼此交互作用,但是他们的行为是基本 独立的。在离散的模拟中,一模拟时钟决定每个活动体的动作发生的时刻和顺序, 系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作 预定要发生的下一个时刻。三
2、、【基本要求】(1) 、模拟某校五层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。五 个楼层由下至上依次称为地下层、第一层、第二层、第三层和第四层,其中第一层 是大楼的进出层,即是电梯的“木垒层”,电梯“空闲”时,将来该层候命。五个 楼层从下到上的编号为:0、1、2、3、4o除了地下层外,每一层都有一个要求向下 的按钮除了第四层外,每一层都有一个要求向上的按钮。对应的变量为:CallUp0.3 和CallDown1.4o电梯内的五个目标层按钮对应的变量为:CallCar0.4o(2) 、电梯一共有七个状态,即正在开门(Opening)、己开门(Opened).正在 关门(Closing)
3、、己关门(Closed)、等待(Waiting)、移动(Moving)、减速(Decelerate)。(3) 、乘客可随机地进岀于任何层。对每个人来说,他有一个能容忍的最长等待时 间,一旦等候电梯时间过长,他将放弃。对于在楼层内等待电梯的乘客,将插入在 等候队列里,每一层有两个等候队列,一队要求向上,一队要求向下,用链队列来 实现。对于在电梯内的乘客,用五个乘客栈来实现,该乘客要去哪一层,就把他放 在相应编号的栈中,对应变量为EleStack0.4o(4)、模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要耗费一定 的时间单位(简记为t):有人进岀时,电梯每隔40t测试一次,若无人进
4、出,则关门关门和开门各需要20t每个人进出电梯均需要25t电梯加速需要15t如果电梯在某层静止时间超过300t,则驶回1层候命。(5)、按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。四、【实验环境】Windows 7Z VC+6.0五、【测试数据及其结果】1、乘客类型反映乘客的所有属性。ADT Client数据对象:D=aie乘客信息,1=1,2,.,n,n0数据关系:R= | ai-l,aieD,i=2,.,n基本操作:PrintClientliifo(Client const &e,ClientStatus)操作结果:输出乘客信息。CreatClient(Client *&p
5、)操作结果:生成新的乘客。DestoryClient(Client *&p)操作结果:该乘客离开系统。GoAbove(Client const &e)操作结果:判断该乘客是否去往高层。CIiifloor(Client const &e)操作结果:返回乘客进入的楼层。CInTime(Client const &e)操作结果:返回乘客进入时间。COutfloor(Client const &e)操作结果:返回乘客进入时间。2、乘客栈类型电梯内的乘客用乘客栈表示,去不同楼层的乘客放在不同的栈中。ADT Estack数据对象:D=aie乘客信息,1=1,2,.,n,n0数据关系:R= | ai-l,a
6、ieD,i=2,.,n基本操作:略。3、等候队列类型在电梯外等待的乘客用等待队列表示。每层各有两个等待队列,分别为 上楼队列和下楼队列。与一般队列不同的是在基本操作中加入了放弃操作CGiveU p (W Queue&Q,int floor)。4、电梯类型表示电梯的各个属性和所有动作。ADT Elevator数据对象:D=aie电梯信息zI=l,2z.zn,n0基本操作:IiiitEle (Elevator &E)操作结果:初始化电梯类型。DestoiyEle(Elevator &E)操作结果:销毁电梯类型。EleDecide(Elevator &EzWQueue wMaxfloor+l 2)操
7、作结果:电梯动作决策。ElevatorRun(Elevator &E,WQueue w Maxfloor+1 2) 操作结果:电梯状态转换。CountOver(Elevator &E)操作结果:判断电梯计时是否完成。EleFloor(Elevator const &E)操作结果:返回电梯所在的层。EleStatus(Elevator const &E)操作结果:返回电梯状态。RequireAbove(Elevator const &E)操作结果:判断是否有高层请求。RequireBelow(Elevator const &E)操作结果:判断是否有低层请求。Ele Achieved (Eleva
8、tor &E)操作结果:判断电梯是否要停于当前层。EleOpenDoor(Elevator &E)操作结果:判断电梯是否要开门。5、高楼模块实现电梯和乘客之间的互交功能。包括:InOut(Elevator &E,WQueue wMaxfloor+l 2)操作结果:进行乘客的进出电梯活动。NewClient(Elevator &E,WQueue w2)操作结果:进入新乘客。PrintStatus(Elevator &E,WQueue w2)操作结果:输出当前状态。Print(Elevator &E,Action a)操作结果:输出电梯动作信息。C:UsersderrackDesktopDAimG
9、_2011102200001827HDDebugtest来XK林炭*楙耕林耕*給*紐初初探 双迎使用 电梯模拟系统谙输入电梯的运行时间:10001所能容忍的等待时间:500 下一乘客要到达的时间:2QQ 所要到达的楼层:51号乘客进入第3层. 2所能容忍的等待时间:30。 下一乘客要到达的时间:150所要到达的楼层:32号乘客进入第2层.3所能容忍的等待时间:250 下一乘客要到达的时间:100 所要到达的楼层M3号乘客进入第1层.电梯门己打开.3号乘客走进电梯,要去第4层. 电梯门己关闭.4所能容忍的等待时间:200下一乘客要到达的时间:150 所要到达的楼层:34号乘客进入第2层.1号乘客
10、放弃等待.2号乘客应弃等待.六、【实验源代码】#iiiclude #iiiclude #iiiclude #iiiclude #include #include #iiiclude /所有常虽,全局变虽和类型定义#define NULL0#define TRUE1#define FALSE0#define OK1#define ERROR0 #define INFEASIBLE -1#define OVERFLOW -2#define INT.MAX 32767typedef int Status;/Status是函数类型,其值是函数结果状态代码#define Empty。/电梯状态enum
11、EleStattisOpeiiiiig/Opened,ClosingzClosed,Moving/Decelerate,Waiting;enum ActionDooi-OpenedzDooraosed,GoingUpzGoingDownzAcliievedzNoneenum EleStageUpzDownzOpeiiDoor,Stop;enum ClientStatusNew,GiveUpzInzOtitzFinish;#define CloseTest40/电梯关门测试时间#define CXrerTinie 300/电梯停候超时时间#define DoorTime 20/开门关门时间#de
12、fine IiiOutTinie 25/进出电梯时间#define Maxfloor 4/最高层# define Minfloor 0/最低层long Tiine=0;时钟long MaxTiine;/系统运行最长时间int IiiOutCotuit=0;/用于进出计时int IiiterTime=0;/卜一乘客进入系统的时间int ID=0;/乘客编号int GiveUpNumber=O;/乘客放弃的数目int TotalTime=0;/总共等待时间/乘客类型typedef struct int QiiietlD; /乘客编号int Outfloor; /去哪层int InTime;/该乘客
13、进入时间int GivepuTime;/所能容忍的等待时间int Infloor;/乘客进入的楼层 Client;/乘客类型基木操作void PriiitClientIiifo(Client const &e,ClientStatus s)switchC) case New:printf( t%d号乘客进入第(1 层.n,e.CliiietID,e.Infloor);bieak;case GiveUp: printf( t%d号乘客放弃等待.n ze.ClinetID);break;case Out: printf(,t%d号乘客走出电梯.n,e.ClinetID);break;case In
14、:printf( t%d号乘客走进电梯,要去第%d.nze.ClinetIDze.Outfloor);break;default: break;Status CreatClieiit(Client 裤&p)int d;p=new Client;if(!p) return OVERFLOW; p-ClinetID=+ID;printff % InTinie=Tinte;printf(”卜一乘客要到达的时间门;scanf(%d:&d);IiiterTime=d;printff所要到达的楼层门;scanf(%d:&d); p-Outfloor=d; wliile(p-Infloor=rand()%(
15、Maxfloor+l)=p-Outfloor); PrintClientIiifo(*p,New);return OK;Status DestoryTClient(Client *&p)delete p; p=NULL; return OK;Status Go Above (Client const &e)if(e.Outfloore.Iiifloor) return TRUE; else return FALSE;Status CInfloor(Client const &e)return e.Inflooi;Status CInTinie(Client const &e)return e.
16、 InTime;Status COtttfloor(Clieiit const &e)return e.Otitfloor;#define STACKJNIT_SIZE 100 /存储空间初始分配虽#define STACKINCREMENT 50/ 存储空间分配增虽*SEleniType;*base;op; stacksize;/乘客栈 typedef Client typedef struct SElemType SElemType int ClientStack;Status InitStack(ClientStack &S)S.base=(SElemType *)nialloc(STA
17、CK_INir_SIZE*sizeof(SElemType); if(IS.base) return OVERFLOW;S.top=S.base;S.stacksize=STACKJNIT_SIZE;return OK;Status DestioyStack(ClientStack &S) SElemType *p;if(S.base)Destor-Client(*p);free(S.base);return OK;Status ClearStack(ClientStack &S) if(IS.base) return ERROR; S.top=S.base;return OK;Status
18、StackEmpty(ClientStack S)if(S.top=S.base) return TRUE;elsereturn FALSE;Status StackLength(ClientStack S)return S.top Sbase;Status GetTop (ClientStack SzSElemType &e)if(!S.base) return ERROR;e=*(S.top-l); return OK;Status Push(ClientStack &SElemType e) if(!S.base) return ERROR;if(S.topSbase=S.stacksi
19、ze) S.base=(SElemType *)realloc(S.basez(S.stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S.base) return OVERFLOW;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;Status Pop (ClientStack &S,SElemType &e) if(S.top=S.base) return ERROR; e=*(-S.top);return OK;void PriiitStack(ClientStack &S)SElemType *
20、i;i=S.base;wliile(iClinetID*/电梯类型fypedef struct int floor; /电梯所在层int ClientNumber; / / 电梯内人数 EleStatus status; / /电梯当前状态 EleStage Stage; /电梯运行时期int Count;/用丁电梯计时int CallUpMaxfloor+l;/ 每层的Up按钮int CallDownMaxfloor+l;/每层的Down按钮int CallCarMaxfloor+l;/ 电梯内的 11 标层按钮ClientStackSMaxfloor+l; / /乘客栈,要去不同楼层的人放
21、在不同的栈中 Elevator;/电梯类型基木操作void InitEle(Elevator &E)inti;E.floor=l;E .status=W aitiiig;E. C otmt=OrerT inie;E.Stage=Down;E.ClientNumber=O;for(i=0;i=Maxfloor;计+)E.CallUp(i=0;E.CallDowni=0;E.CallCari=0;for(i=0;i=Maxfloor;i+) InitStack(E.Si);Status CouiitOvei-(Elevator &E)if(E.Cotuit) E Count;return FALS
22、E;return TRUE;)void Destoi?rEle (Elevator &E)int i;for(i=0;i=Maxfloor;计+) DestroyStack(E.Si);Status EleFloor(Elevator const &E)return E.floor;)EleStatus EleStatus(Elevator const &E)return E.status;)Status Require Above (Elevator const &E)for(int i=Eflooir+l;i=Miiifloor;i)if(E.CallCari | | E.CallDown
23、i | | E.CallUpi) return TRUE;return FALSE;Status EleAcliieved(Elevator &E)if(E.CallCarE.floor) rettun TRUE;if(E.Stage=Up&E.CallUpE.floor | | E.Stage=Down&E.CallDownE.floor) return TRUE;if(E.Stage=Up&E. CallDo wn(E.floor & & IRequire Above(E)E.Stage=Down;rettirn TRUE;if (E .Stage=Do wn&E.CallUpE.floo
24、r&!RequireBelow(E)E .Stage=Up;retum TRUE;return FALSE;Status EleOpenDoor (Elevator &E)if(E.CallCarE.floor | | E.CallDownE.floor&E.Stage=Down | | E.CallUpE.floor&E.Stage=Up) return TRUE;if(E.status=Waiting) if(E.CallDownE.floor) E.Stage=Down;rettirn TRUE;if(E.CallUpE.floor) E.Stage=Up;retum TRUE;retu
25、rn FALSE;EleStage EleDecide (Elevator &E)int Above,Below;Above=RequireAbove(E);Below=ReqttiieBelow(E);if(Above=0&Below=0) return Stop;elseif(E.Stage=Up) if(Above!=0) return Up;elseE .Stage=Down;rettirn Down;elseif (Below!=0) return Down;elseE.Stage=Up;retum Up;I)Action ElevatorRun(Elevator &E)switdi
26、(E. status)case Opening:E.status=Opened;E Count=ClosETest;return DoorOpened;case Opened:if(E.Stage=Down&!E.CallCarE.floor&!E.CallDownE.floor | | E.Stage=Up &!E.CaUCarE.floor&!E.CaUUpE.floor) E.status=Closing;E.Couiit=DoorTinie; breetk;case Closing:E.status=Closed;return DoorClosed;case Waiting:迅ECou
27、nt=0) if(E.floor!=l) E.CallCarl=l;else E Count;if(EleOpenDoor(E) E.status=Opeiiiiig;E.Couiit=DoorTinie;break;case Closed:break;case Moving:/完成移动if(E.Stage=Up) E.floor+;elseE.floor;return Acliieved;E.status=Opening;E.Count=DoorTmie;break;I;return None;/单链队列-队列的链式存储结构typedef Client *QElemType;/等候队列typ
28、edef struct QNode QElemTypedata;struct QNode *next;QNode,*QtieuePti-;typedef struct QueuePtr front;QueuePtrrear;JWQueue;/等待队列的基木操作Status InitQtietie(WQtieue &Q)Q.front=Q.rear=new QNode;if(IQ.front) return OVERFLOW;Q.front-iiext=MULL;Q.front-data=NULL;return OK;Status DestioyQuetieflVQueue &Q)wliile(
29、Q.front)Q.reai=Q.front-next;if(Q.front-data) DestoryClient(Q.front-data); else Q front;Q.front=Q.rear;return OK;)Status EnQtieue(VVQtieue &Q,QElemType e)QueuePtr p;p=new QNode;if(!p) return OVERFLOW;p-data=e;p-next=NULL;Q.rear-next=p;Q.rear=p;return OK;Status DeQueue(WQueue &QzQElemType &e)QueuePtr
30、p;if(Q.front=Q.reainext;e=p-data;Q.front-iiext=p-next;if(Q.rear=p) Q.reai=Q.front;free(p);return OK;Status QtteueEmpt0 VQueue Q)if(Q.front=Q.reeir) return TRUE;else return FALSE;Status QDelNode(VVQueue &Q/QueuePtr p)QueuePtr q;if(p=NULL | | p-next=NULL) return ERROR; q=p-next;p-next=q-next;if(p-next
31、=NULL) Q.rear=p;Destory Client (q data);&ee(p);return OK;QueuePtr p; p=Q.front; if(p-next!=NULL)PrintClientIiifo(*(p-next-data)zGiveUp);TotalTime+=Tinie-CInTiine(*(p-next-data);QDelNode (Q, p);GiveUpNtmiber+;else p-next-dataGivepuTime; return OK;)void PriiitQueueOVQueue Q)QueuePtr q;int count=0;if(Q
32、.front-next=NULL) goto end; q=Q.front-next;wliile(q!=NULL)coutsehv(3)q-data-ClinetIDnext;cotuit+;end:wliile(count+=4) coutf H;void InOut(Elevator &E,WQueue wMaxfloor+l2)Client *p;if(E. CallC ar E .floor)if(StackEmpty(E.SE.floor) E.CallCarE.floor=0; elsePop(E .SE. floor ,p);E ClieiitN timber;InOu tCo
33、unt=InOutT ime;PrintClientIiifo(*p,Out);TotalTime+=Tinie-CInTiiiie(*p); Destory Client(p);Iif(E.CallCarE.floor=0)if (!QueueEmpty(wE.floor E.Stage)IDeQueue(wE.floor E.Stagezp);Push(E.SCOutfloor(*p),p); if(E.CallCarCOutfloor(*p)!=l) E.CallCarCOtitfloor(*p)=l;E ClientNumber+;IiiOtitCouiit=InOutTiiiie;PrintClientInfo(*p,In);if(E.Stage=Down) E.CdlDownE.floor=0;else E.CallUpE.floor=0;void NewClient(Elevator &EWQuetie w5 2)Client *p;CreatClient(p);if(G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海水鱼类养殖工突发故障应对考核试卷及答案
- 四年级数学(小数加减运算)计算题专项练习与答案
- 2025新疆水发水务集团有限公司招聘工作人员4人考试模拟试题及答案解析
- 2025国家电投集团中国电力招聘2人考试参考题库及答案解析
- 2025湖南湘潭市韶山旅游发展集团有限公司本部及所属子公司部分岗位招聘9人考试模拟试题及答案解析
- 2025黑龙江省农业投资集团有限公司权属企业市场化选聘20人考试参考题库及答案解析
- 2025山西太原市太航医院儿科招聘2人考试参考题库及答案解析
- 2025舟山市艺术剧院招聘事业单位工作人员1人考试参考题库及答案解析
- 2025西安市太元路学校(小学部)招聘考试参考题库及答案解析
- 2025年甘肃省平凉市崇信县考核招聘农村订单定向医学生考试参考题库及答案解析
- 2024公路水运工程工地建设标准化指南
- 统编版2024-2025学年道德与法治三年级上册全册教案
- 四川省选调笔试真题
- 保险核保岗位招聘笔试题与参考答案2025年
- (高级)数据安全管理员实操题考试题库(含答案)
- 购置体育器材申请书模板
- 新版加油站全员安全生产责任制
- 数字人课程设计培训
- DB11T 1482-2017 城市轨道交通综合救援应用技术规范
- 上海市桃浦中学2025届高三上学期10月月考数学试题
- GB/T 44669-2024残疾人服务机构服务规范
评论
0/150
提交评论