实验四 队列综合应用 实验报告.docx

上传人:b****5 文档编号:2872826 上传时间:2022-11-16 格式:DOCX 页数:50 大小:201.63KB
下载 相关 举报
实验四 队列综合应用 实验报告.docx_第1页
第1页 / 共50页
实验四 队列综合应用 实验报告.docx_第2页
第2页 / 共50页
实验四 队列综合应用 实验报告.docx_第3页
第3页 / 共50页
实验四 队列综合应用 实验报告.docx_第4页
第4页 / 共50页
实验四 队列综合应用 实验报告.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

实验四 队列综合应用 实验报告.docx

《实验四 队列综合应用 实验报告.docx》由会员分享,可在线阅读,更多相关《实验四 队列综合应用 实验报告.docx(50页珍藏版)》请在冰豆网上搜索。

实验四 队列综合应用 实验报告.docx

实验四队列综合应用实验报告

队列综合操作(机场起降模拟程序)实验报告

一、实验内容和目的

1.队列的基本概念和基本操作:

队列的入队操作,队列的出队操作,判断队列是否为空队列,队列的初始化操作

2.链表的基本概念和基本操作:

链表的初始化,链表的定位操作,链表的插入,删除操作。

二、实验原理

1.队列是只允许在表的一端进行插入(队尾),而在另一端(队头)进行删除操作的线性表。

队列的修改是按照先进先出的原则进行的。

2.模拟程序采用两个队列结构,分别表示机场的进场队列(包括正在降落的飞机和等待降落的飞机)和出场队列(包括正在起飞的飞机和等待起飞的飞机),另外,还采用了两个链表分别储存已经降落但尚未到达离场时间的飞机(即空闲状态的飞机)以及尚未到达降落时间的飞机。

3.模拟程序中,飞机的数据包括航班名,飞机状态,飞机在该状态下持续的时间(用于判断飞机的起飞和降落等过程的完成情况),飞机降落的时间和日期。

另外,程序中使用了全局变量记录模拟程序中的时间,并且模拟程序时间的起始值记录在数据文件中。

三、程序流程图

3.1程序整体流程图

3.2程序主逻辑函数(控制飞机走向的函数)

四、实验结果

4.1程序第一次运行(或者存放飞机信息的数据文件不存在时,询问如何产生飞机信息)

4.2选择手动输入飞机数据(除了输入飞机信息以外,还需要输入模拟程序的起始时间)

 

4.3选择随机生成数据

4.4模拟程序开始

界面从左到右,分别是进场队列,机场的机库以及出场队列。

航班名前面方括号中的为飞机的状态。

进场队列中的“等待”表示飞机正处于申请立场的状态,出场队列中的“等待”表示飞机正处于申请离场的状态。

4.5使用pinfo参数启动程序,重新输入飞机数据(旧的数据文件会被覆盖)

4.6使用apinfo参数启动程序,重新生成飞机数据(旧的数据文件被覆盖)

4.7模拟程序结束,输出提示信息

五、操作说明

1.在第一次启动程序或者程序找不到飞机数据文件时,程序会进入到编辑飞机信息的界面。

(图4.1)。

然后选择由程序随机产生数据或者手动输入数据。

在输入数据过程中,除了飞机信息以外,还需要输入一些额外的信息。

例如,模拟程序的起始时间,飞机的数量。

2.程序顺利把飞机数据从数据文件读入内存以后,程序会自动进入模拟的过程。

如果数据文件是由程序自动生成的,并不能保证生成的每台飞机的降落时间是均匀分布的,有可能会出现在相当长的一段时间都没有飞机信息的出现。

3.当模拟结束时,并不会立即输出模拟结束的提示信息,在此过程中,跑道状态处会提示模拟程序已经结束。

模拟程序结束的10秒才输出模拟程序结束的信息。

六、附录:

代码

#include

#include

#include

#include

#include

#defineTRUE1

#defineFALSE0

#defineROAD_STATUS_IDLE0//表明跑道正处于空闲状态

#defineROAD_STATUS_UP1//表明跑道上正有飞机在起飞

#defineROAD_STATUS_DOWN2//表明跑道上正有飞机在降落

#definePLANE_STATUS_IDLE0//飞机正处于空闲状态

#definePLANE_STATUS_TAKE_OFF1//表示飞机称出于起飞状态

#definePLANE_STATUS_LANDING2//表示飞机正处于降落状态

#definePLANE_STATUS_WAIT_FOR_IN3//表示飞机正处于申请进场状态

#definePLANE_STATUS_WAIT_FOR_OUT4//表示飞机正处于申请离场状态

#defineQUEUE_OK1//表示队列操作成功

#defineQUEUE_MALLOC_FAIL-1//表示进行队列操作时分配空间发生错误

#defineQUEUE_EMPTY-2//表示对空队进行操作(插入除外)的错误信息

#defineQUEUE_TRAVERSE_FAIL-3//表示遍历过程中由遍历函数引起的函数终止

#defineQUEUE_INDEX_OUT_OF_RANGE-4//表示进行队列操作的索引超出有效范围

#defineQUEUE_NULL_POINTER-5//表示使用空指针接收内容的错误

#defineLIST_OK0//表示链表操作成功

#defineLIST_MALLOC_FAIL-1//表示链表操作时分配空间发生错误

#defineLIST_EMPTY_LIST-2//表示对空链表进行操作(插入除外)的错误信息

#defineLIST_INDEX_OUT_OF_RANGE-3//表示指定的删除和插入位置无效

#defineLIST_TRAVERSE_FAIL-4//表示遍历过程中由遍历函数引起的函数终止

#defineFILE_OK0//表示进行文件操作成功

#defineFILE_OPEN_FAIL-1//表示打开文件时发生错误

#defineFILE_NOT_ACCEPT-2//表示信息文件为无效信息文件

#defineFILE_EMPTY_FILE-3//表示尝试从没有数据的文件中读取数据

#defineFILE_TYPE_INPUT1//表示数据文件是用户手动输入的

#defineFILE_TYPE_RANDOM2//表示数据文件是由程序随机生成的

#defineTIME_STOP30//表示飞机在机库中停留的最短时间

#defineTIME_UP20//表示起飞时间为20分钟

#defineTIME_DOWN20//表示降落时间为20分钟

/*-----------结构体声明部分----------------*/

//储存每台飞机信息的结构体

structPlane

{

charname[31];//航班名

intstatus;//飞机状态

inttime;//飞机状态持续的时间

intland_time;//表示飞机降落的时间

intland_year;//表示飞机降落的年份

intland_month;//表示飞机降落的月份

intland_day;//表示飞机降落的天

};

//链队结构体

structLinkQueue

{

structQueueNode*front;//链队的队头

structQueueNode*rear;//链队的队尾

intcount;//链队中结点的数量

};

//表示队列中每个元素的节点

structQueueNode

{

structQueueNode*next;//指向链队的下一个结点

structPlanedata;//储存飞机信息

};

//链表结点,用于储存在机场中停留的飞机信息

structLinkListNode

{

structPlanedata;//储存飞机信息

structLinkListNode*next;//指向链表的下一个结点

};

//链式线性表结构

structLinkList

{

structLinkListNode*head;//链表头

intcount;//链表中结点的数量

};

//该结构体表示机场

structAirport

{

structLinkQueue*in;//表示等待降落的飞机队列

structLinkQueue*out;//表示等待升空的飞机队列

structLinkList*garage;//表示已经在机场降落的飞机

};

//文件头结构,储存模拟程序的起始时间和飞机数量等信息

//文件头标记用于判断文件是否为有效文件

structFile_Header

{

chartag[4];//文件头标记

intfileType;//表示数据文件的产生方式

intcount;//飞机数量

inttime_startup;//程序起始时间

inttime_year;//模拟程序起始年份

inttime_month;//模拟程序起始月份

inttime_day;//模拟程序起始天

};

typedefstructPlanePlane;

typedefstructLinkQueueQueue;

typedefstructQueueNodeQNode;

typedefstructLinkListNodeLNode;

typedefstructLinkListList;

typedefstructFile_HeaderFHeader;

typedefstructAirportAirport;

/*-----------全局变量声明------------------*/

intRoadStatus;//用于区分跑道目前的状态

int*t,*m,*d,*y;//计算时间的变量

intisFinish;//标记变量,用于记录文件中是否所有的航班都已经模拟完毕

intisInUpdate;//用于绘图的辅助变量

intisOutUpdate;//用于绘图的辅助变量

intisGarageUpdate;//用于绘图的辅助变量

intiTime;//用于记录时间,控制界面的绘制

intiFileType;//表示读入文件的产生类型

List*L;//储存尚未到达进场时间的飞机信息

Airport*A;//表示机场的结构体变量

/*-----------函数声明部分------------------*/

//1.队列操作函数的声明

//队列的初始化操作

intQueue_Init(Queue*Q);

//判断队列是否为空队列

intQueue_IsEmpty(Queue*Q);

//获取队列的长度

intQueue_Length(Queue*Q);

//把一台飞机信息添加到队尾

intQueue_Insert(Queue*Q,PlaneP);

//获取队头元素信息,使用P接收队头元素信息

intQueue_GetHead(Queue*Q,Plane*P);

//删除队头元素,并用指针P接收队头元素信息

intQueue_Delete(Queue*Q,Plane*P);

//队列的遍历

intQueue_Traverse(Queue*Q,int(*fun)(Plane*P));

//获取队列中特定位置的飞机信息

Plane*Queue_GetInfoPtrByIndex(Queue*Q,intindex);

//获取队列中从队头到队尾第一台正在降落的飞机信息

Plane*Queue_GetDown

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

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

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