停车场管理系统栈队列代码C语言
时间: 2023-08-18 19:18:52 浏览: 230
以下是使用两个栈实现队列和停车场管理系统的代码示例(使用C语言):
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个栈结构体
typedef struct {
int *data;
int top;
} Stack;
// 初始化栈
void init_stack(Stack *s) {
s->data = (int *)malloc(sizeof(int) * 1000);
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return s->top == -1;
}
// 压入元素
void push(Stack *s, int x) {
s->top++;
s->data[s->top] = x;
}
// 弹出元素
int pop(Stack *s) {
int x = s->data[s->top];
s->top--;
return x;
}
// 定义一个队列结构体
typedef struct {
Stack stackA; // 入队栈
Stack stackB; // 出队栈
} MyQueue;
// 初始化队列
void init_queue(MyQueue *q) {
init_stack(&q->stackA);
init_stack(&q->stackB);
}
// 判断队列是否为空
int is_queue_empty(MyQueue *q) {
return is_empty(&q->stackA) && is_empty(&q->stackB);
}
// 入队操作
void enqueue(MyQueue *q, int x) {
push(&q->stackA, x);
}
// 出队操作
int dequeue(MyQueue *q) {
if (is_empty(&q->stackB)) {
while (!is_empty(&q->stackA)) {
push(&q->stackB, pop(&q->stackA));
}
}
return pop(&q->stackB);
}
// 定义一个停车场管理结构体
typedef struct {
int capacity; // 停车场容量
int current_count; // 当前停车数量
MyQueue entry_queue; // 进入队列
MyQueue exit_queue; // 出去队列
} ParkingLot;
// 初始化停车场管理系统
void init_parking_lot(ParkingLot *p, int capacity) {
p->capacity = capacity;
p->current_count = 0;
init_queue(&p->entry_queue);
init_queue(&p->exit_queue);
}
// 判断停车场是否已满
int is_full(ParkingLot *p) {
return p->current_count == p->capacity;
}
// 判断停车场是否为空
int is_empty(ParkingLot *p) {
return p->current_count == 0;
}
// 车辆进入停车场
void park(ParkingLot *p, int car_id) {
if (is_full(p)) {
printf("停车场已满,无法停车!\n");
return;
} else {
enqueue(&p->entry_queue, car_id);
p->current_count++;
printf("车辆%d已停入停车场,当前停车数量为%d\n", car_id, p->current_count);
return;
}
}
// 车辆离开停车场
void leave(ParkingLot *p, int car_id) {
if (is_empty(p)) {
printf("停车场已空,无车辆可离开!\n");
return;
} else {
while (!is_queue_empty(&p->entry_queue)) {
int car = dequeue(&p->entry_queue);
if (car != car_id) {
enqueue(&p->exit_queue, car);
} else {
break;
}
}
while (!is_queue_empty(&p->exit_queue)) {
enqueue(&p->entry_queue, dequeue(&p->exit_queue));
}
p->current_count--;
printf("车辆%d已离开停车场,当前停车数量为%d\n", car_id, p->current_count);
return;
}
}
// 测试函数
int main() {
ParkingLot parking_lot;
init_parking_lot(&parking_lot, 3); // 创建一个容量为3的停车场
park(&parking_lot, 1); // 车辆1进入停车场
park(&parking_lot, 2); // 车辆2进入停车场
park(&parking_lot, 3); // 车辆3进入停车场,此时停车场已满
leave(&parking_lot, 2); // 车辆2离开停车场
park(&parking_lot, 4); // 车辆4进入停车场
leave(&parking_lot, 1); // 车辆1离开停车场
leave(&parking_lot, 3); // 车辆3离开停车场
leave(&parking_lot, 4); // 车辆4离开停车场,此时停车场已空
return 0;
}
```
使用示例:
```
输出结果:
车辆1已停入停车场,当前停车数量为1
车辆2已停入停车场,当前停车数量为2
停车场已满,无法停车!
车辆2已离开停车场,当前停车数量为1
车辆4已停入停车场,当前停车数量为2
车辆1已离开停车场,当前停车数量为1
车辆3已离开停车场,当前停车数量为0
车辆4已离开停车场,当前停车数量为0
```
阅读全文