|
|
@ -189,25 +189,32 @@
|
|
|
|
在程序中,定义了两个queue对象,一个用于存储准备降落的飞机,另一个则用于存储准备起飞的飞机。每个队列中存储结构体类型的plane对象,表示每个飞机的编号和进入队列的时间。
|
|
|
|
在程序中,定义了两个queue对象,一个用于存储准备降落的飞机,另一个则用于存储准备起飞的飞机。每个队列中存储结构体类型的plane对象,表示每个飞机的编号和进入队列的时间。
|
|
|
|
在模拟过程中,程序使用队列的push()函数将新到达的飞机加入队列中,使用队列的pop()函数处理已经降落或起飞的飞机。程序还使用队列的empty()函数和front()函数来检查队列是否为空,并获取队列中的第一个元素。
|
|
|
|
在模拟过程中,程序使用队列的push()函数将新到达的飞机加入队列中,使用队列的pop()函数处理已经降落或起飞的飞机。程序还使用队列的empty()函数和front()函数来检查队列是否为空,并获取队列中的第一个元素。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
可以配合程序代码加以说明。如:
|
|
|
|
可以配合程序代码加以说明。如:
|
|
|
|
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
```cpp
|
|
|
|
struct LNode {
|
|
|
|
struct plane{
|
|
|
|
E data; // 数据元素
|
|
|
|
int name;
|
|
|
|
LNode *next; // 指向下一个结点的指针
|
|
|
|
int in_queue_time;
|
|
|
|
};
|
|
|
|
} plane;
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
该程序中使用的队列数据结构具有以下特点:
|
|
|
|
|
|
|
|
1.先进先出:队列是一种先进先出(FIFO)的数据结构,元素在队列中的顺序是按照进入队列的顺序决定的。在该程序中,飞机进入队列后就不能直接访问,需要按照队列中的顺序依次处理。
|
|
|
|
|
|
|
|
2.可以动态增长:队列的容量可以动态增长,队列中的元素数量不受空间限制。
|
|
|
|
对该数据结构的特点进行分析。
|
|
|
|
3.可以通过指针实现链式存储:队列可以通过指针实现链式存储,不需要连续的存储空间,因此可以更加灵活地管理内存空间,避免内存浪费。
|
|
|
|
|
|
|
|
4.支持入队和出队操作:队列支持入队和出队操作,可以用于实现一些类似于任务派发、消息队列等功能。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 3.2 核心算法的实现
|
|
|
|
## 3.2 核心算法的实现
|
|
|
|
|
|
|
|
该程序主要使用了两个算法来实现飞机的降落和起飞。
|
|
|
|
描述算法的实现方法。
|
|
|
|
其中,降落的算法如下:
|
|
|
|
|
|
|
|
每个单位时间内,生成随机数决定当前有多少架飞机要降落,加入到降落队列中。
|
|
|
|
|
|
|
|
如果降落队列不为空,则处理降落队列中的第一架飞机。
|
|
|
|
|
|
|
|
如果起飞队列也不为空,则等待处理完降落队列中的飞机后,再处理起飞队列中的飞机。
|
|
|
|
|
|
|
|
记录每个飞机在队列中等待的时间,累加到总等待时间中。
|
|
|
|
|
|
|
|
起飞的算法类似于降落的算法,只是要进行一些修改。具体实现如下:
|
|
|
|
|
|
|
|
每个单位时间内,生成随机数决定当前有多少架飞机要起飞,加入到起飞队列中。
|
|
|
|
|
|
|
|
如果起飞队列不为空,则处理起飞队列中的第一架飞机。
|
|
|
|
|
|
|
|
如果降落队列不为空,则等待处理完起飞队列中的飞机后,再处理降落队列中的飞机。
|
|
|
|
|
|
|
|
记录每个飞机在队列中等待的时间,累加到总等待时间中。
|
|
|
|
|
|
|
|
|
|
|
|
可以配合程序代码加以说明。如:
|
|
|
|
可以配合程序代码加以说明。如:
|
|
|
|
|
|
|
|
|
|
|
@ -219,10 +226,8 @@ void bubble_sort(T a[], int n)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
该算法的时间复杂度为O(n),其中n为模拟的时间,即模拟了n个时间单位。在每个时间单位内,程序需要进行一些基本的操作,如生成随机数、检查队列是否为空、取出队列中的第一个元素等。这些操作的时间复杂度都是O(1),因此程序的总时间复杂度为O(n)。
|
|
|
|
|
|
|
|
该算法的空间复杂度为O(m),其中m为队列的最大容量。程序中定义了两个队列,每个队列最多可以存储m 个元素。因此程序的总空间复杂度为O(m)。在程序运行过程中,队列中的元素数量不会超过m,因此空间复杂度是稳定的,不受模拟时间n的影响。需要注意的是,程序中还使用了一些变量来记录总飞机数、总等待时间等信息,但是这些变量的数量较小且与模拟时间无关,因此可以认为它们对空间复杂度的影响可以忽略不计。
|
|
|
|
对该算法的时间和空间复杂度进行分析。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 4. 系统测试
|
|
|
|
# 4. 系统测试
|
|
|
@ -236,7 +241,7 @@ void bubble_sort(T a[], int n)
|
|
|
|
测试用例1:
|
|
|
|
测试用例1:
|
|
|
|
输入: 10 5 1 1
|
|
|
|
输入: 10 5 1 1
|
|
|
|
预期结果: 程序能正常运行,没有任何飞机等待超时。
|
|
|
|
预期结果: 程序能正常运行,没有任何飞机等待超时。
|
|
|
|
运行结果: ##0号时间## 1号飞机降落了,等了0个单位时间。
|
|
|
|
运行结果:##0号时间## 1号飞机降落了,等了0个单位时间。
|
|
|
|
##1号时间## 1号飞机降落了,等了0个单位时间。
|
|
|
|
##1号时间## 1号飞机降落了,等了0个单位时间。
|
|
|
|
##2号时间## 2号飞机降落了,等了0个单位时间。
|
|
|
|
##2号时间## 2号飞机降落了,等了0个单位时间。
|
|
|
|
##3号时间## 3号飞机降落了,等了0个单位时间。
|
|
|
|
##3号时间## 3号飞机降落了,等了0个单位时间。
|
|
|
@ -248,7 +253,17 @@ void bubble_sort(T a[], int n)
|
|
|
|
##9号时间## 9号飞机降落了,等了0个单位时间。
|
|
|
|
##9号时间## 9号飞机降落了,等了0个单位时间。
|
|
|
|
运行结果和预期结果一致,为通过测试。
|
|
|
|
运行结果和预期结果一致,为通过测试。
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
测试用例2:
|
|
|
|
|
|
|
|
输入: 5 2 3 2
|
|
|
|
|
|
|
|
预期结果: 程序能正常运行,有一架飞机等待较长时间。
|
|
|
|
|
|
|
|
运行结果:##0号时间## 1号飞机降落了,等了0个单位时间。
|
|
|
|
|
|
|
|
##1号时间##
|
|
|
|
|
|
|
|
##2号时间## 2号飞机降落了,等了0个单位时间。 1号飞机降落了,等了2个单位时间。
|
|
|
|
|
|
|
|
##3号时间## 3号飞机降落了,等了0个单位时间。
|
|
|
|
|
|
|
|
##4号时间## 4号飞机降落了,等了0个单位时间。
|
|
|
|
|
|
|
|
运行结果和预期结果一致,为通过测试。
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
# 5. 总结
|
|
|
|
# 5. 总结
|
|
|
|
|
|
|
|
|
|
|
|