以下是使用C语言实现题目要求的代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 // 停车场最大容量 // 车辆结构体 typedef struct Car { char plateNum[10]; // 车牌号 int arriveTime; // 到达时间 int leaveTime; // 离开时间 int parkTime; // 停留时间 int fee; // 费用 } Car; // 链队列节点结构体 typedef struct QueueNode { Car car; struct QueueNode* next; } QueueNode; // 链队列结构体 typedef struct Queue { QueueNode* front; QueueNode* rear; } Queue; // 初始化链队列 void initQueue(Queue* queue) { queue->front = queue->rear = NULL; } // 判断链队列是否为空 int isQueueEmpty(Queue* queue) { return queue->rear == NULL; } // 入队 void enqueue(Queue* queue, Car car) { QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode)); newNode->car = car; newNode->next = NULL; if (isQueueEmpty(queue)) { queue->front = queue->rear = newNode; } else { queue->rear->next = newNode; queue->rear = newNode; } } // 出队 Car dequeue(Queue* queue) { if (isQueueEmpty(queue)) { printf("队列为空\n"); exit(1); } QueueNode* frontNode = queue->front; Car car = frontNode->car; queue->front = frontNode->next; if (queue->front == NULL) { queue->rear = NULL; // 队列已空 } free(frontNode); return car; } // 顺序栈结构体 typedef struct { Car* cars; int top; } Stack; // 初始化顺序栈 void initStack(Stack* stack, int size) { stack->cars = (Car*)malloc(sizeof(Car) * size); stack->top = -1; } // 判断顺序栈是否为空 int isStackEmpty(Stack* stack) { return stack->top == -1; } // 入栈 void push(Stack* stack, Car car) { stack->cars[++(stack->top)] = car; } // 出栈 Car pop(Stack* stack) { if (isStackEmpty(stack)) { printf("栈为空\n"); exit(1); } return stack->cars[(stack->top)--]; } // 获取栈顶元素 Car top(Stack* stack) { if (isStackEmpty(stack)) { printf("栈为空\n"); exit(1); } return stack->cars[stack->top]; } // 判断车辆是否在停车场内 int isInPark(Stack* stack, char* plateNum) { for (int i = 0; i <= stack->top; i++) { if (strcmp(stack->cars[i].plateNum, plateNum) == 0) { return 1; } } return 0; } // 获取车辆在停车场中的位置 int getCarPosition(Stack* stack, char* plateNum) { for (int i = 0; i <= stack->top; i++) { if (strcmp(stack->cars[i].plateNum, plateNum) == 0) { return i + 1; } } return 0; } // 计算停留时间和费用 void calculateFee(Car* car, int unitPrice) { car->parkTime = car->leaveTime - car->arriveTime; car->fee = car->parkTime * unitPrice; } int main() { int n; // 停车场容量 int unitPrice; // 计费单位价格 Stack parkStack; // 停车场 Queue roadQueue; // 便道 printf("请输入停车场容量: "); scanf("%d", &n); printf("请输入计费单位价格: "); scanf("%d", &unitPrice); initStack(&parkStack, n); initQueue(&roadQueue); while (1) { char operation[10]; char plateNum[10]; int time; printf("请输入操作类型(到达/离去): "); scanf("%s", operation); if (strcmp(operation, "到达") == 0) { printf("请输入车牌号: "); scanf("%s", plateNum); printf("请输入到达时间: "); scanf("%d", &time); if (parkStack.top < n - 1) { Car car; strcpy(car.plateNum, plateNum); car.arriveTime = time; push(&parkStack, car); printf("%s 已停在停车场的第 %d 个位置\n", car.plateNum, parkStack.top + 1); } else { Car car; strcpy(car.plateNum, plateNum); car.arriveTime = time; enqueue(&roadQueue, car); printf("%s 已停在便道上\n", car.plateNum); } } else if (strcmp(operation, "离去") == 0) { printf("请输入车牌号: "); scanf("%s", plateNum); printf("请输入离去时间: "); scanf("%d", &time); if (isInPark(&parkStack, plateNum)) { Car car; while (strcmp(top(&parkStack).plateNum, plateNum) != 0) { Car tmpCar = pop(&parkStack); calculateFee(&tmpCar, unitPrice); printf("%s 已离开停车场,停留时间为 %d 分钟,应交费用为 %d 元\n", tmpCar.plateNum, tmpCar.parkTime, tmpCar.fee); } car = pop(&parkStack); car.leaveTime = time; calculateFee(&car, unitPrice); printf("%s 已离开停车场,停留时间为 %d 分钟,应交费用为 %d 元\n", car.plateNum, car.parkTime, car.fee); if (!isQueueEmpty(&roadQueue)) { Car enqueueCar = dequeue(&roadQueue); push(&parkStack, enqueueCar); printf("%s 从便道上进入停车场,停在第 %d 个位置\n", enqueueCar.plateNum, getCarPosition(&parkStack, enqueueCar.plateNum)); } } else { printf("车辆 %s 不在停车场\n", plateNum); } } else { printf("请输入有效操作类型\n"); } } return 0; } ``` 这段代码实现了使用顺序栈模拟停车场和链队列模拟便道的功能。程序通过终端读入汽车到达或离去的数据,并根据操作类型进行相应的操作。当车辆到达时,如果停车场未满,则将车辆停入停车场的第一个空位;如果停车场已满,则将车辆停在便道上。当车辆离去时,按照后进先出的原则,依次将前面进入停车场的车辆离开,直到找到要离开的车辆为止。离开停车场后,如果便道上有车辆等待,则将便道上的第一辆车调入停车场。对每辆离开的车辆,计算其停留时间和应交的费用,并进行输出。停车场容量和计费单位价格从终端读入。 [2024-07-22 10:49:18 | AI写代码神器 | 4017点数解答]