使用栈和队列实现停车场管理的C语言代码:
时间: 2024-05-17 11:14:09 浏览: 23
好的,下面是使用栈和队列实现停车场管理的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义停车场最大容量
typedef struct {
char type; // 到达/离去
int id; // 汽车牌照号码
int time; // 到达/离去的时刻
} Car;
typedef struct {
int top; // 栈顶指针
Car data[MAX_SIZE]; // 栈元素
} ParkStack;
typedef struct {
int front; // 队头指针
int rear; // 队尾指针
Car data[MAX_SIZE]; // 队列元素
} WaitQueue;
int park[MAX_SIZE]; // 停车场
int park_top = -1; // 停车场栈顶指针
ParkStack park_stack; // 停车场栈
WaitQueue wait_queue; // 等待队列
// 初始化停车场栈
void init_park_stack() {
park_stack.top = -1;
}
// 检查停车场是否为空
int is_park_empty() {
return park_stack.top == -1;
}
// 检查停车场是否已满
int is_park_full() {
return park_stack.top == MAX_SIZE - 1;
}
// 将车辆停放在停车场中
int park_car(Car car) {
if (is_park_full()) {
// 停车场已满,将车辆加入等待队列
if (wait_queue.rear == MAX_SIZE - 1) {
// 等待队列已满,无法加入新车辆
return 0;
}
wait_queue.rear++;
wait_queue.data[wait_queue.rear] = car;
return 1;
} else {
// 停车场未满,将车辆停放在停车场内
park_top++;
park[park_top] = car.id;
park_stack.top++;
park_stack.data[park_stack.top] = car;
return 1;
}
}
// 从停车场中取出车辆
int unpark_car(Car car) {
int i, j, flag = 0;
int time = 0;
for (i = 0; i <= park_top; i++) {
if (park[i] == car.id) {
// 找到对应的车辆
flag = 1;
time = car.time - park_stack.data[i].time;
// 将车辆从停车场中移除
for (j = i; j < park_top; j++) {
park[j] = park[j+1];
}
park_top--;
park_stack.top--;
break;
}
}
if (!flag) {
// 停车场中没有找到对应的车辆,可能已经离开停车场
return 0;
} else {
// 计算停留时间和停车费用
int fee = time <= 2 ? 5 : (time - 2) * 3 + 5;
printf("车辆 %d 在停车场内停留 %d 分钟,需缴纳停车费用 %d 元\n", car.id, time, fee);
if (!is_park_empty()) {
// 停车场不为空,将等待队列中的车辆加入停车场
Car next_car = wait_queue.data[wait_queue.front+1];
park_car(next_car);
wait_queue.front++;
wait_queue.rear--;
}
return 1;
}
}
// 主函数
int main() {
// 初始化停车场栈和等待队列
init_park_stack();
wait_queue.front = 0;
wait_queue.rear = -1;
// 输入车辆信息
printf("请输入车辆信息(格式:到达/离去,汽车牌照号码,到达/离去的时刻),输入 E 0 0 结束输入:\n");
char type;
int id, time;
while (1) {
scanf("%c %d %d", &type, &id, &time);
getchar(); // 读取输入缓冲区的回车符
if (type == 'E' && id == 0 && time == 0) {
break;
}
Car car = {type, id, time};
if (type == 'A') {
// 汽车到达,尝试将车辆停放在停车场中
if (!park_car(car)) {
printf("停车场已满,车辆 %d 无法停放\n", car.id);
} else {
printf("车辆 %d 停放在停车场中\n", car.id);
}
} else if (type == 'D') {
// 汽车离开,尝试将车辆从停车场中移除
if (!unpark_car(car)) {
printf("车辆 %d 不在停车场中\n", car.id);
}
}
}
return 0;
}
```
注意,上述代码中使用了两个全局变量 `park` 和 `park_top` 来表示停车场,这不是一个很好的实现方式,更好的实现方式是将停车场用一个栈来表示。在上述代码的基础上,你可以尝试使用栈来实现停车场,以提高代码的可读性和可维护性。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)