ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:176.09KB ,
资源ID:7223781      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7223781.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告完整版1.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告完整版1.docx

1、数据结构课程设计报告完整版1第二题:电梯模拟1、需求分析:模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。九个楼层由下至上依次称为地下层、第一层、第二层、第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t

2、,则驶回1层侯命。而题目的最终要求输出时:按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。 2、设计 21设计思想: (1)数据结构设计本题中的电梯的变化,是一个动态变化的过程,要在动态过程中实现正常跳转,首先要确定各种跳转的状态,因而这里我使用枚举类型来表示电梯的各种状态的:enum up,down,stop,homeState(home);同时初始化最初状态为电梯在本垒层。而在电梯的运行过程中对于乘客来说,显然有一个进入电梯与出电梯的队列,因而在这里我是用的链表来实现这个过程的,同时用结构体来保存该乘客的信息:typedef struct passage int now;/乘

3、客当前所在的位置 int dis;/乘客的目地地 int wait;/最长的等待的时间 int waitnow;/已经等待的时间 struct passage *next; Passage;虽然电梯中的状态是由枚举类型来实现的,但是在整个程序的运行过程中,我还是为电梯设置了一个结构体类型,以便保存更多的信息:typedef struct lift int count_C;/计数电梯已到达的层数 int count_A;/系统的总时间计数器 记得必须初始化为0 int flag_inHigh;/九个楼层有无请求的标志 哪个楼层如果有请求 该标志置1 int num;/等待队列中的人数 记得要进行

4、初始化为0 int people;/电梯中人数 int flag_outHigh;Lift; (2)算法设计顾名思义本程序在运行的过程中用到的算法便是“电梯算法”,电梯算法借鉴了磁盘寻道C-LOOK算法,即电梯向一个方向运行,直到这个方向上没有服务为止。2.2设计表示(1)、函数调用关系图及其说明如下 : (2)函数接口说明:函数中的参数均是使用的全局变量的传递,因而在函数间进行传递的过程中比较简单,下面就将主要函数及他们之间的参数的关系列出如下:int OutOrIn(Lift &L,Passage *Queue,Passage *LiftQ);/进和出电梯的总函数int Update(Li

5、ft &L,Passage *Queue,Passage *LiftQ);/刷新的函数int Run(Lift &L,Passage *Queue,Passage *LiftQ);/整个电梯各种状态转换的函数int OpenTheDoor(Lift &L);/开门主要是用于解决其中的时间问题int CloseTheDoor(Lift &L);/关门int In(Lift &L);/进入 主要是解决每个人进入电梯的时间问题int Out(Lift &L);/出去int Test(Lift &L,Passage *Queue,Passage *LiftQ);/电梯测试关门还是开门的函数int Re

6、quest(Lift &L,Passage *Queue);2.3详细设计3、调试分析该程序的调试过程较为轻松,基本在算法实现的基础上没有出现什么错误,因而在调试的过程中并无什么深刻印象。4、用户手册点击运行程序,在弹出的窗口中,会提示要输入的信息:1、 提示信息为:“请输入图中的顶点数和弧数以及图的标志和弧的标志:”按要求输入即可,本题即输入9 11 v a2、 提示信息为“请完成该邻接表的输入”:由于邻接表的输入信息一般较多,而且均是采用的链表来存储,因而该部分的输入要特别的小心3、 在完成上面两步的输入后按enter键便能得到程序的运行结果,即输出完成整项工程至少需要多少时间和影响工程进

7、度的关键活动 5 测试数据及测试结果测试数据如下:9 11 v a131 6 12 4 23 5 3214 1 4314 1 5415 2 6526 9 77 7 8617 4 9718 2 10818 4 1190程序运行结果如下:6、原程序清单如下:/* 关键路径问题 2010年07月31日晚上08:36开始动工*/#includeusing namespace std;const int MAX_V_NUM=20;/最大存储顶点的数目const int STACK_INIT_SIZE=20;/栈的存储空间分配量/数据存储部分/* 一下是图的邻接表的存储表示,由于第一次用 用的比较的生疏*

8、/typedef struct ArcNode int adjvex; /该弧所指向的顶点的位置 struct ArcNode *nextarc;/指下一条弧的指针 int info;/该弧相关信息 即权值 int name;/弧的名字ArcNode;typedef struct VNode int data;/顶点的信息 ArcNode *firstarc;/指向第一条依附该顶点的弧的指针AdjListMAX_V_NUM;typedef struct AdjList vertices; int vnum,arcnum;/图中当前顶点数和弧数 char kind,kind1;/图中的各类标志顶

9、点和弧ALGraph;typedef struct int *base; int *top; int stacksize;Stack;int veMAX_V_NUM;Stack T;/函数体描述部分int InitStack(Stack &S);int Push(Stack &S,int &e);int Pop(Stack &S,int &e);int CriticalPath(ALGraph &G);int ToPoOrder(ALGraph &G,Stack &T);int FindInDegree(ALGraph &G,int (&indegree)MAX_V_NUM);/*下面是函数的

10、具体实现部分*/构造一个空栈int InitStack(Stack &S) S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int); if(!S.base) return 0; S.top=S.base; S.stacksize=STACK_INIT_SIZE;/可以用于当栈的存储空间不够的情况下 进行扩充 return 1;/元素进栈int Push (Stack &S, int &e) *S.top+=e; return 1;/元素出栈int Pop(Stack &S, int &e) if(S.top=S.base) return 0; e=*-S

11、.top; return 1;/判断栈是否为空int StackEmpty(Stack &S) if(S.top=S.base) return 1; else return 0;/找出每个顶点的入度int FindInDegree(ALGraph &G,int (&indegree)MAX_V_NUM) ArcNode *p; int i; for(i=0;iMAX_V_NUM;i+) indegreei=0; for(i=0;inextarc) indegreep-adjvex+; return 0;/拓扑排序同时求出各活动的最早发生时间int ToPoOrder(ALGraph &G,St

12、ack &T) int count=0; int i,j,k; Stack S1; ArcNode *p; int indegreeMAX_V_NUM; InitStack(T); InitStack(S1); FindInDegree(G,indegree); for(i=0;iG.vnum;i+) if(indegreei=0) Push(S1,i); /建立0入度顶点栈S for(i=0;inextarc) k=p-adjvex; if(-indegreek=0) Push(S1,k); if(vej+(p-info)vek) vek=vej+(p-info); / for(i=0;iG

13、.vnum;i+)/ coutveiendl; if(countG.vnum) return 0; else return 1;/计算各顶点的最迟发生时间及进行输出int CriticalPath(ALGraph &G) int vlMAX_V_NUM; int dut; int i,j,k,ee,el; ArcNode *p;/ char tag; if(!ToPoOrder(G,T) return 0; cout完成整项工程至少需要的时间是:veG.vnum-1endl; for(i=0;inextarc) k=p-adjvex; dut=(p-info); if(vlk-dutvlj)

14、vlj=vlk-dut; / for(i=0;iG.vnum;i+)/ coutvliendl; cout影响工程进度的关键活动是:endl; for(j=0;jnextarc) k=p-adjvex; dut=(p-info); ee=vej; el=vlk-dut; /coutj=jK=kdut=dutee=eeel=elendl; if(ee=el) /tag=(ee=el)?*:; coutG.kind1nameendl; return 1;int main() ALGraph G; int i,j,Hnum; ArcNode *p,*q;/ int indegreeMAX_V_NUM

15、; /ALGraph G; cout请输入图中的顶点数和弧数以及图的标志和弧的标志:G.vnum; cinG.arcnum; cinG.kind; cinG.kind1; cout请完成该邻接表的输入:endl; for(i=0;iG.vnum;i+) cout请输入该顶点的信息G.verticesi.data; cout请输入与G.kindG.verticesi.data号顶点相邻的弧的数目:Hnum; if(Hnum=0) G.verticesi.firstarc=0; else cout请依次次输入弧的信息(包括顶点的位置及权值和该边的名称)nextarc=0; cinp-adjvex;

16、 cinp-info; cinp-name; for(j=0;jHnum-1;j+) cout请依次次输入弧的信息(包括顶点的位置及权值和该边的名称)q-adjvex; cinq-info; cinq-name; q-nextarc=p-nextarc; p-nextarc=q; /ToPoOrder(G,T); /CriticalPath(G);/test/* for(i=0;iG.vnum;i+) cout该顶点是G.kindG.verticesi.dataendl; cout与该顶点相邻的顶点依次是:nextarc) coutG.kindadjvex.dataendl; */ FindI

17、nDegree(G,indegree); /for(i=0;iG.vnum;i+) / coutindegreei=indegreeiendl; CriticalPath(G);/test end/ return 0;/* 第五题:关键路径问题1、需求分析:当一项工程被划分为若干个子任务或活动后,人们不仅需要确定这些活动的先后次序,而且需要进一步计算完成整个工程的时间,确定哪些活动是影响工程进度的关键活动,以便合理组织人力、物力、财力,加快这些活动的进度,为按时或提前完成整个工程提供保证。要求:给定一个带权的有向图代表一个工程的AOE网络,研究如下问题:(1)完成整项工程至少需要多少时间?(2

18、)哪些活动是影响工程进度的关键活动?示例图: 2、设计 21设计思想: (1)数据结构设计 本题中的数据结构主要影响在于整个程序设计过程中数据的存储和拓扑排序、关键路径算法的实现,而在算法的实现过程中又要依赖数据的存储结构,而在图的存储结构中,比较适合实现拓扑排序算法的显然是邻接表的存储结构,所以本程序设计过程中均采用的是邻接表的存储方法。其主要数据的主要存储结构体声明如下:typedef struct ArcNode int adjvex; /该弧所指向的顶点的位置 struct ArcNode *nextarc;/指下一条弧的指针 int info;/该弧相关信息 即权值 int name

19、;/弧的名字ArcNode;typedef struct VNode int data;/顶点的信息 ArcNode *firstarc;/指向第一条依附该顶点的弧的指针AdjListMAX_V_NUM;typedef struct AdjList vertices; int vnum,arcnum;/图中当前顶点数和弧数 char kind,kind1;/图中的各类标志顶点和弧ALGraph;同时由于拓扑排序实现过程中要用到进栈和出栈的操作,因此还有栈的声明如下:typedef struct int *base; int *top; int stacksize;Stack;(2)算法设计 本

20、程序的算法设计主要体现在拓扑排序和求事件的最早发生时间和最迟发生时间的的过程中,因此算法设计主要也是针对拓扑排序和求事件发生的最早发生和最迟发生时间的算法设计。拓扑排序的思想是将入度为零的结点进行S1中的出栈操作,同时将其对T进行进栈,这主要是方便在进行完求最早发生时间后,通过出栈的操作直接求最迟发生时间。2.2设计表示(1)、函数调用关系图及其说明如下 : (2)函数接口说明:函数中的参数均是使用的全局变量的传递,因而在函数间进行传递的过程中比较简单,下面就将主要函数及他们之间的参数的关系列出如下:int InitStack(Stack &S);int Push(Stack &S,int &

21、e);int Pop(Stack &S,int &e);int CriticalPath(ALGraph &G);int ToPoOrder(ALGraph &G,Stack &T);int FindInDegree(ALGraph &G,int (&indegree)MAX_V_NUM);2.3详细设计该程序的算法主要在以下四个方面:拓扑排序、求出事件的最早发生时间、求出事件的最迟发生时间、求出关键活动,其中关键活动的算法设计较为简单,即是在求出各活动的最早发生时间和最迟发生时间的前提下根据判断两时间是否相等,来判断是否是关键活动,因而主要的算法设计便在前三个方面。拓扑排序与求事件的最早发生

22、时间相结合,拓扑排序即将入度为零的栈S中的元素依次出栈,同时将该元素进栈到栈T中,在进栈的同时求出其最早发生时间算法如下:从ve(0)=0开始向前递推Ve(j)=然后便是求事件的最迟发生时间,该过程就是对上面的过程中得到的栈T进行依次出栈,同时求其最迟发生时间,其算法简要描述如下:从vl(n-1)=ve(n-1)起向后递推Vl(i)=具体实现见代码中int ToPoOrder(ALGraph &G,Stack &T)和int CriticalPath(ALGraph &G)函数;3、调试分析该程序的调试过程较为轻松,基本在算法实现的基础上没有出现什么错误,因而在调试的过程中并无什么深刻印象。4

23、、用户手册点击运行程序,在弹出的窗口中,会提示要输入的信息:4、 提示信息为:“请输入图中的顶点数和弧数以及图的标志和弧的标志:”按要求输入即可,本题即输入9 11 v a5、 提示信息为“请完成该邻接表的输入”:由于邻接表的输入信息一般较多,而且均是采用的链表来存储,因而该部分的输入要特别的小心6、 在完成上面两步的输入后按enter键便能得到程序的运行结果,即输出完成整项工程至少需要多少时间和影响工程进度的关键活动 5 测试数据及测试结果测试数据如下:9 11 v a131 6 12 4 23 5 3214 1 4314 1 5415 2 6526 9 77 7 8617 4 9718 2

24、 10818 4 1190程序运行结果如下:6、原程序清单如下:/* 关键路径问题 2010年07月31日晚上08:36开始动工*/#includeusing namespace std;const int MAX_V_NUM=20;/最大存储顶点的数目const int STACK_INIT_SIZE=20;/栈的存储空间分配量/数据存储部分/* 一下是图的邻接表的存储表示,由于第一次用 用的比较的生疏*/typedef struct ArcNode int adjvex; /该弧所指向的顶点的位置 struct ArcNode *nextarc;/指下一条弧的指针 int info;/该弧

25、相关信息 即权值 int name;/弧的名字ArcNode;typedef struct VNode int data;/顶点的信息 ArcNode *firstarc;/指向第一条依附该顶点的弧的指针AdjListMAX_V_NUM;typedef struct AdjList vertices; int vnum,arcnum;/图中当前顶点数和弧数 char kind,kind1;/图中的各类标志顶点和弧ALGraph;typedef struct int *base; int *top; int stacksize;Stack;int veMAX_V_NUM;Stack T;/函数体描述部分int InitStack(Stack &S);int Push(Stack &S,int &e);int Pop(Stack &S,int &e);int CriticalPath(ALGraph &G);int ToPoOrder(ALGraph &G,Stack &T);int FindInDegree(ALGraph &G,int (&indegree)MAX_V_NUM);/*下面是函数的具体实现部分*/构造一个空栈int InitStack(Stack &S) S.base=(int*)malloc(STACK_IN

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1