数据结构与算法停车场管理系统c语言程序
时间: 2024-10-24 14:19:29 浏览: 19
数据结构c语言版课程设计停车场管理系统方案.doc
5星 · 资源好评率100%
在C语言中创建一个停车场管理系统,可以使用数组和指针来模拟栈和队列的数据结构。以下是一个简单的示例程序概述:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_CAPACITY 10 // 停车场最大容量
typedef struct {
int plate; // 车牌号
time_t arrival_time; // 到达时间
} Car;
// 顺序栈结构体
typedef struct Stack {
Car cars[MAX_CAPACITY];
int top;
} Stack;
Stack parking_lot = {0, 0}; // 初始化停车场栈
Queue queue = {NULL, 0}; // 初始化队列
// 栈操作
void push_to_parkingLot(Car car) {
if (parking_lot.top < MAX_CAPACITY) {
parking_lot.cars[parking_lot.top++] = car;
} else {
printf("Parking lot full, waiting in the queue.\n");
enqueue(queue, car);
}
}
// 队列操作
void enqueue(Queue *queue, Car car) {
Queue *new_queue = malloc(sizeof(Queue));
new_queue->head = car;
new_queue->size = 1;
new_queue->tail = &new_queue->head;
while (queue->head != NULL) {
car = queue->head;
queue->head = queue->head->next;
free(car);
queue->size--;
}
queue = new_queue;
}
// 计算停留时间和费用
void calculate_fee(Car car) {
time_t departure_time = ... // 获取实际离开时间
int stay_duration = (departure_time - car.arrival_time) / (60 * 60); // 将时间转换为小时
float fee = ... // 根据停车场和便道费率计算费用
printf("Car %d stayed for %d hours and paid %.2f.\n", car.plate, stay_duration, fee);
}
int main() {
// 读取输入并调用相应函数
while (1) {
char action[2], plate[7];
int timestamp;
scanf("%s %s %d", action, plate, ×tamp);
if (strcmp(action, "A") == 0) { // 到达
Car car = {atoi(plate), timestamp};
push_to_parkingLot(car);
} else if (strcmp(action, "D") == 0) { // 离开
Car car = dequeue(queue); // 从队列头取出
if (car.plate == plate) {
calculate_fee(car);
} else {
printf("Invalid license plate for departure.\n");
}
}
// 其他条件,例如 E 结束输入时停止循环
}
return 0;
}
// 队列辅助函数:入队(未列出)
void enqueue(Queue *queue, Car car) {
if (queue->tail->next == NULL) {
queue->tail->next = &car;
} else {
Car *temp = queue->tail;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = &car;
}
queue->size++;
}
```
这个程序简化了部分细节,如错误处理和具体的费率计算。实际编写时还需要添加更多的边界检查和错误处理代码。注意,这里没有实现`dequeue()`函数从队列头部移除节点,你需要为其编写相应的代码。
阅读全文