数据结构课程设计报告-电梯调度模拟系统(完整版)Word文档下载推荐.docx
- 文档编号:13021429
- 上传时间:2022-10-02
- 格式:DOCX
- 页数:36
- 大小:230.36KB
数据结构课程设计报告-电梯调度模拟系统(完整版)Word文档下载推荐.docx
《数据结构课程设计报告-电梯调度模拟系统(完整版)Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告-电梯调度模拟系统(完整版)Word文档下载推荐.docx(36页珍藏版)》请在冰豆网上搜索。
intdis;
//乘客的目地地
intwait;
//最长的等待的时间
intwaitnow;
//已经等待的时间
structpassage*next;
}Passage;
虽然电梯中的状态是由枚举类型来实现的,但是在整个程序的运行过程中,我还是为电梯设置了一个结构体类型,以便保存更多的信息:
typedefstructlift
{
intcount_C;
//计数电梯已到达的层数
intcount_A;
〃系统的总时间计数器记得必须初始化为0
intflag_in[High];
〃九个楼层有无请求的标志哪个楼层如果有请求该标志置1
intnum;
//等待队列中的人数记得要进行初始化为0
intpeople;
//电梯中人数
intflag_out[High];
JLift;
(2)算法设计
顾名思义本程序在运行的过程中用到的算法便是一"
电梯算法”,电梯算法借鉴了磁盘寻道C-LOOK算法,即电梯向一个方向运行,直到这个方向上没有服务为止。
2.2设计表示
(1)、函数调用关系图及其说明如下:
(2)函数接口说明:
函数中的参数均是使用的全局变量的传递,因而在函数间进行传递的过程中比较简单,下面就将主要函数及他们之间的参数的关系列出如下:
intOutOrln(Lift&
L,Passage*Queue,Passage*LiftQ);
〃进和出电梯的总函数
intUpdate(Lift&
〃刷新的函
intRun(Lift&
L,Passage*Queue,Passage*LiftQ);
//整个电梯各种状态转换的函数
intOpenTheDoor(Lift&
L);
//开门主要是用于解决其中的时间问题intCloseTheDoor(Lift&
//关门
intIn(Lift&
L);
〃进入主要是解决每个人进入电梯的时间问题intOut(Lift&
//出去
intTest(Lift&
//电梯测试关门还是开门的函数
intRequest(Lift&
L,Passage*Queue);
2、 3详细设计
3、 调试分析
该程序的调试过程较为轻松,基本在算法实现的基础上没有出现什么错误,因而在调试的过程中并无什么深刻印象。
4、 用户手册
点击运行程序,在弹出的窗口中,会提示要输入的信息:
1、 提示信息为:
“请输入图中的顶点数和弧数以及图的标志和弧的标志:
”按要求输入即可,本题即输入911va
2、 提示信息为“请完成该邻接表的输入”:
由于邻接表的输入信息一般较多,而且均是采用的链表来存储,因而该部分的输入要特别的小心
3、 在完成上面两步的输入后按enter键便能得到程序的运行结果,即输出完成整项工程至少需要多少时间和影响工程进度的关键活动
5测试数据及测试结果
测试数据如下:
911va
1
3
161
242
353
2
414
415
4
526
5
697
778
6
749
7
8210
8
8411
9
程序运行结果如下:
6、原程序清单如下:
/*
关键路径问题
2010年07月31日晚上08:
36开始动工
*/
#include<
iostream>
usingnamespacestd;
constintMAX_V_NUM=20;
〃最大存储顶点的数目
constintSTACK_INIT_SIZE=20;
〃栈的存储空间分配量
////数据存储部分
一下是图的邻接表的存储表示,由于第一次用用的比较的生疏
typedefstructArcNode
intadjvex;
〃该弧所指向的顶点的位置
structArcNode*nextarc;
〃指下一条弧的指针
intinfo;
//该弧相关信息即权值
intname;
//弧的名字
}ArcNode;
typedefstructVNode
intdata;
//顶点的信息
ArcNode*firstarc;
〃指向第一条依附该顶点的弧的指针
}AdjList[MAX_V_NUM];
typedefstruct
AdjListvertices;
intvnum,arcnum;
//图中当前顶点数和弧数
charkind,kindl;
//图中的各类标志顶点和弧
JALGraph;
int*base;
int*top;
intstacksize;
}Stack;
intve[MAX_V_NUM];
StackT;
〃函数体描述部分
intInitStack(Stack&
S);
intPush(Stack&
S,int&
e);
intPop(Stack&
intCriticalPath(ALGraph&
G);
intToPoOrder(ALGraph&
G,Stack&
T);
intFindInDegree(ALGraph&
G,int(&
indegree)[MAX_V_NUM]);
/*下面是函数的具体实现部分*/
〃构造一个空栈
S)
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!
S.base)
return0;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
//可以用于当栈的存储空间不够的情
况下进行扩充
return1;
};
〃元素进栈
intPush(Stack&
S,int&
e)
*S.top++=e;
〃元素出栈
if(S,top==S.base)
e=*—S.top;
〃判断栈是否为空
intStackEmpty(Stack&
if(S.top==S.base)
else
〃找出每个顶点的入度
indegree)[MAX_V_NUM])(
ArcNode*p;
inti;
for(i=0;
i<
MAX_V_NUM;
i++)
indegree[i]=0;
G.vnum;
for(p=G.vertices[i].firstarc;
p;
p=p->
nextarc)indegree[p->
adjvex]++;
}
〃拓扑排序同时求出各活动的最早发生时间
T)inti,j,k;
StackS1;
intindegree[MAX_V_NUM];
InitStack(T);
InitStack(Sl);
FindInDegree(G,indegree);
if(indegree[i]==0)
Push(Sl,i);
〃建立0入度顶点栈S
ve[i]=0;
while(!
StackEmpty(S1))
Pop(Sl,j);
Push(Tj);
count++;
for(p=G.vertices[j].firstarc;
p;
nextarc)
k=p->
adjvex;
if(—indegree[k]==0)
Push(Sl,k);
if(ve|j]+(p->
info)>
ve[k])
ve[k]=ve[j]+(p->
info);
//for(i=0;
// cout«
ve[i]«
endl;
if(count<
G.vnum)
〃计算各顶点的最迟发生时间及进行输出
G)inti,j,k,ee,el;
//chartag;
ToPoOrder(G,T))
cout«
"
完成整项工程至少需要的时间是:
”vvve[G.vnum-l]vvendl;
vl[i]=ve[G.vnum-1];
StackEmpty(T))
for(Pop(T,j),p=G.vertices[j].firstarc;
dut=(p->
if(vl[k]-dut<
vl[j])
vl[j]=vl[k]-dut;
ivGvnum;
//cout«
vl[i]«
coutvv”影响工程进度的关键活动是:
H«
for(j=0;
j<
j++)
for(p=G.vertices[j].firstarc;
ee=ve[j];
el=vl[k]-du
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 电梯 调度 模拟 系统 完整版