- 1、本文档共58页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计:电梯模拟
问题描述:
模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。九个楼层由下至上依次称为地下一层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。
乘客可随时地进出于任何层。对于每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t检测一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层精致时间超过300t,则驶回1层候命。
基本要求:
按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。
需求分析:
(1)用系统计时,每当有新的动作要输入时要暂停计时,等输入完成后即可继续计时。
(2)输入各个动作,最后,输入完毕后,可以保存所有动作序列,并有序输出。
设计:
设计思想
(1)存储结构
根据问题描述,可采用单链表结构。
结点描述:
a[1000] mytime *next 事件内容 时间发生的时间 下一个事件指针
定义如下:
typedef struct Node
{
char a[1000];//信息
int mytime;//时间
struct Node *next;
}SLNode;
(2)基本思想
a.用 time.h 里面的clock()来计时,当有输入时,记录下开始输入的时间和结束输入的时间,之后就可以算出动作的时间了。
b.将各个动作发生的时间进行处理,算出每个事件的发生顺序和时间。
c.将各个数据插入链表,即可实现题目要求。
设计表示法
(1)过程或函数调用的关系图
main
yunxing
print
ListInsert
LinListSort
各个动作函数(n个)
ge)
ListInitiate
Destroy
(2)基于数据结构的操作组
主要在于yunxing()函数,它将各个时间动作处理成时间事件,并将事件插入到链表中。
(3)过程与接口规格说明
无
实现注释
未实现。
详细设计
无
调试分析
用户手册
测试结果
没有成功
源程序清单
#include stdio.h
#include stdlib.h
#include time.h
#include string.h
typedef struct //规定最大乘坐人数为13
{
int lc;//电梯所在楼层
int rs;//电梯中的人数
int men;//门的状态 0关1开(假设关了门时除了在第一层等人时之外,都在移动)
}dianti;
typedef struct
{
int rrsj;//一个人的容忍时间
int sz;//所在楼层
int md;//目的楼层
}man;
typedef struct Node
{
char a[1000];//信息
int mytime;//时间
struct Node *next;
}SLNode;
void ListInitiate(SLNode * * head)
{
if((*head = (SLNode * )malloc(sizeof(SLNode))) == NULL) exit(1);
( *head)-next = NULL;
}
int ListInsert(SLNode *head,int i,char a[1000],int t)
{
SLNode *p,*q;
int j;
p=head;
j=-1;
while(p-next!=NULL ji-1)
{
p=p-next;
j++;
}
if(j!=i-1)
{
printf(插入位置参数错!);
return 0;
}
if((q=(SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1);
q-mytime = t;
strcpy(q-a,a);
q-next =p-next;
p-next =q;
return 1;
}
void LinListSort(SLNode *head)
{//用时间排序
SLNode *curr,*pre,*p,*q;
p=head-next;
head-next
文档评论(0)