数据结构课程设计报告

发布 2022-10-05 02:42:28 阅读 4706

第二题:电梯模拟。

1、需求分析:

模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。九个楼层由下至上依次称为地下层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。

模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:

有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。

而题目的最终要求输出时:

按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。

2、设计。2.1设计思想:

1)数据结构设计。

本题中的电梯的变化,是一个动态变化的过程,要在动态过程中实现正常跳转,首先要确定各种跳转的状态,因而这里我使用枚举类型来表示电梯的各种状态的:

enum state(home);

同时初始化最初状态为电梯在本垒层。而在电梯的运行过程中对于乘客来说,显然有一个进入电梯与出电梯的队列,因而在这里我是用的链表来实现这个过程的,同时用结构体来保存该乘客的信息:

typedef struct passage

int now;//乘客当前所在的位置。

int dis;//乘客的目地地。

int wait;//最长的等待的时间。

int waitnow;//已经等待的时间。

struct passage *next;

passage;

虽然电梯中的状态是由枚举类型来实现的,但是在整个程序的运行过程中,我还是为电梯设置了一个结构体类型,以便保存更多的信息:

typedef struct lift

int count_c;//计数电梯已到达的层数。

int count_a;//系统的总时间计数器记得必须初始化为0

int flag_in[high];/九个楼层有无请求的标志哪个楼层如果有请求该标志置1

int num;//等待队列中的人数记得要进行初始化为0

int people;//电梯中人数。

int flag_out[high];

lift;2)算法设计。

顾名思义本程序在运行的过程中用到的算法便是—“电梯算法”,电梯算法借鉴了磁盘寻道c-look算法,即电梯向一个方向运行,直到这个方向上没有服务为止。

2.2设计表示。

1)、函数调用关系图及其说明如下 :

2)函数接口说明:

函数中的参数均是使用的全局变量的传递,因而在函数间进行传递的过程中比较简单,下面就将主要函数及他们之间的参数的关系列出如下:

int outorin(lift &l,passage *queue,passage *liftq);/进和出电梯的总函数。

int update(lift &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 request(lift &l,passage *queue);

2.3详细设计。

3、调试分析。

该程序的调试过程较为轻松,基本在算法实现的基础上没有出现什么错误,因而在调试的过程中并无什么深刻印象。

4、用户手册。

点击运行程序,在弹出的窗口中,会提示要输入的信息:

1、 提示信息为:“请输入图中的顶点数和弧数以及图的标志和弧的标志:”按要求输入即可,本题即输入9 11 v a

2、 提示信息为“请完成该邻接表的输入”:由于邻接表的输入信息一般较多,而且均是采用的链表来存储,因而该部分的输入要特别的小心。

3、 在完成上面两步的输入后按enter键便能得到程序的运行结果,即输出完成整项工程至少需要多少时间和影响工程进度的关键活动。

5 测试数据及测试结果。

测试数据如下:

9 11 v a

程序运行结果如下:

6、原程序清单如下:

关键路径问题。

2024年07月31日晚上08:36开始动工。

#include

using namespace std;

const int max_v_num=20;//最大存储顶点的数目。

const int stack_init_size=20;//栈的存储空间分配量。

///数据存储部分。

一下是图的邻接表的存储表示,由于第一次用用的比较的生疏……

typedef struct arcnode

int adjvex该弧所指向的顶点的位置。

struct arcnode *nextarc;//指下一条弧的指针。

int info;//该弧相关信息即权值。

int name;//弧的名字。

arcnode;

typedef struct vnode

int data;//顶点的信息。

arcnode *firstarc;//指向第一条依附该顶点的弧的指针。

adjlist[max_v_num];

typedef struct

adjlist vertices;

int vnum,arcnum;//图中当前顶点数和弧数。

char kind,kind1;//图中的各类标志顶点和弧。

algraph;

typedef struct

int *base;

int *top;

int stacksize;

stack;

int ve[max_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)

if(!return 0;

可以用于当栈的存储空间不够的情况下进行扩充。

return 1;

/元素进栈。

int push (stack &s, int &e)

return 1;

/元素出栈。

int pop(stack &s, int &e)

if(return 0;

e=*return 1;

/判断栈是否为空。

int stackempty(stack &s)

if(return 1;

else return 0;

/找出每个顶点的入度。

int findindegree(algraph &g,int (&indegree)[max_v_num])

arcnode *p;

int i;

for(i=0;i indegree[i]=0;

for(i=0;i<

return 0;

/拓扑排序同时求出各活动的最早发生时间。

int topoorder(algraph &g,stack &t)

int count=0;

int i,j,k;

stack s1;

arcnode *p;

int indegree[max_v_num];

initstack(t);

initstack(s1);

findindegree(g,indegree);

for(i=0;i<

if(indegree[i]==0)

push(s1,i);

//建立0入度顶点栈s

for(i=0;i<

ve[i]=0;

while(!stackempty(s1))

/ for(i=0;i<

cout< if(count<

return 0;

else return 1;

/计算各顶点的最迟发生时间及进行输出。

int criticalpath(algraph &g)

int vl[max_v_num];

int dut;

int i,j,k,ee,el;

arcnode *p;

/ char tag;

if(!topoorder(g,t))

return 0;

cout<<"完成整项工程至少需要的时间是:"

数据结构课程设计报告

东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...

数据结构课程设计报告

设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...

数据结构课程设计报告

河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...