【东南大学】【数据结构】实验报告机场模拟程序Airport.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构实验报告(第一次)

oxstar

名称

机场模拟程序AirportSimulation(三跑道)

问题描述

设机场有三个跑道,跑道1专用于降落,跑道2专用于起飞,跑道3优先用于降落。当等待降落队列为空时,跑道3也可用于起飞。修改并运行机场模拟程序AirportSimulation,使之能利用所有的跑道资源。

分析

教材中已经给出了非常详细的实例,由于只是跑道数量的不同,只需在它的基础上将模拟函数、参数设置和数据成员做一些修改即可。

数据结构和算法分析

本例涉及的数据结构类型主要是环状队列,用于存储等待的飞机队列。由于飞机从哪一条跑道降落或者起飞是由机场方面动态决定的,故仍只需两个队列。原例中跑道大约可以提供1/2时间用于降落,不妨设权重为1/2,那么根据题意,本例降落时间权重将达1+1/2=3/2,因而将等待队列延长至15(需开设16)。起飞等待队列同理。队列长度在Queue.h中默认定义:

const int DefaultSize = 16;

Queue( int MaxQueueSize = DefaultSize );

Queue结构属于数据结构基础的内容,不在此讨论,代码详见Queue.h。

与上述相似的原因,单位时间期望到达飞机总数上限也相应提升至3。只可能同时安排2架飞机起飞或者降落,所以增加单起/降总数限制为2。

AirportSimulation::AirportSimulation()

{ ……

else if( expectarrive + expectdepart > 3.0 || expectarrive > 2.0 || expectdepart > 2.0 )

{

cout << "机场将饱和!请重新输入。"<< endl;

ok = false;

}

……

}

为确保供数据分析的数据全面,为每一条跑道提供了单独储存空闲时间单元数、降落/起飞飞机数等的变量,并在程序相应位置给出设置和显示输出。

int idletime1; // 跑道1空闲时间单元数

int idletime2; // 跑道2空闲时间单元数

int idletime3; // 跑道3空闲时间单元数

int nland1; // 跑道1降落的飞机数

int nland3; // 跑道3降落的飞机数

int nland; // 降落的飞机总数

int ntakeoff2; // 跑道2起飞的飞机数

int ntakeoff3; // 跑道3起飞的飞机数

int ntakeoff; // 起飞的飞机总数

在实现安排跑道的算法方面,基于各条跑道的不同性质,可以用3条顺序执行的判断语句用以安排飞机起降,形如:

void AirportSimulation::RunSimulation() { ……

if( !landing.IsEmpty() )

{ // 跑道1降落飞机

p = *landing.Delete( p );

Land( p, 1 );

}

else Idle( 1 );

if( !takeoff.IsEmpty() )

{ //跑道2起飞飞机

p = *takeoff.Delete( p );

Fly( p, 2 );

}

else Idle( 2 );

if( !landing.IsEmpty() )

{ // 跑道3降落飞机

p = *landing.Delete( p );

Land( p, 3 );

}

else if( !takeoff.IsEmpty() )

{ // 跑道3起飞飞机

p = *takeoff.Delete( p );

Fly( p, 3 );

}

else Idle( 3 ); // 处理空闲时间单元……

}

由于跑道增多,起飞和降落飞机需要显示具体跑道信息,因此Fly 、Land、Idle和Conclude 函数需要重新定义:

void AirportSimulation::Fly( plane& p, int airstrip )

{

int wait = curtime - p.tm;

cout << " ▲▲飞机" << p.id << "从跑道" << airstrip << "起飞,该机等待时间:" << wait << "。" << endl;

if( airstrip == 2 )

ntakeoff2++; // 跑道2起飞飞机总数加1

else

ntakeoff3++; // 跑道3起飞飞机总数加1

takeoffwait += wait; // 累加总起飞等待时间

}

Land函数与之完全类似,在此省略。

void AirportSimulation::Idle( int airstrip )

{

cout << " ¤¤跑道" << airstrip << "空闲。" << endl;

if( airstrip == 1 )

idletime1++; // 跑道1空闲时间加1

else if( airstrip == 2 )

idletime2++; // 跑道2空闲时间加1

else

idletime3++; // 跑道3空闲时间加1

}

void AirportSimulation::Conclude()

{

nland = nland1 + nland3;

ntakeoff = ntakeoff2 + ntakeoff3;

相关文档
最新文档