#include <stdio.h> #include <stdlib.h>

#define MAX_SIZE 10

//定义车辆结构体 typedef struct { char plateNum[10]; //车牌号 int arrivalTime; //到达时间 int parkTime; //停车时间 } Car;

//定义栈结构体 typedef struct { Car data[MAX_SIZE]; //存储数据的数组 int top; //栈顶指针 } Stack;

//定义队列结构体 typedef struct { Car data[MAX_SIZE]; //存储数据的数组 int front; //队头指针 int rear; //队尾指针 } Queue;

//初始化栈 void initStack(Stack *s) { s->top = -1; }

//判断栈是否为空 int isEmptyStack(Stack *s) { return s->top == -1; }

//判断栈是否已满 int isFullStack(Stack *s) { return s->top == MAX_SIZE - 1; }

//入栈 void push(Stack *s, Car c) { if (isFullStack(s)) { printf('停车场已满,无法停车!\n'); return; } s->data[++s->top] = c; printf('车辆 %s 已停入停车场,停车位为 %d\n', c.plateNum, s->top + 1); }

//出栈 void pop(Stack *s, Queue *q) { if (isEmptyStack(s)) { printf('停车场为空,无车辆可出!\n'); return; } Car c = s->data[s->top--]; int parkTime = rand() % 10 + 1; //随机生成停车时间 c.parkTime = parkTime; printf('车辆 %s 已从停车场出去,停车时间为 %d 小时\n', c.plateNum, c.parkTime); if (!isEmptyQueue(q)) { Car c2 = front(q); printf('便道上的车辆 %s 已进入停车场,停车位为 %d\n', c2.plateNum, s->top + 2); push(s, c2); dequeue(q); } }

//初始化队列 void initQueue(Queue *q) { q->front = q->rear = -1; }

//判断队列是否为空 int isEmptyQueue(Queue *q) { return q->front == -1; }

//判断队列是否已满 int isFullQueue(Queue *q) { return q->front == (q->rear + 1) % MAX_SIZE; }

//入队 void enqueue(Queue *q, Car c) { if (isFullQueue(q)) { printf('便道已满,无法停车!\n'); return; } if (isEmptyQueue(q)) { q->front = q->rear = 0; } else { q->rear = (q->rear + 1) % MAX_SIZE; } q->data[q->rear] = c; printf('车辆 %s 已停入便道,等待停车场空位\n', c.plateNum); }

//出队 void dequeue(Queue *q) { if (isEmptyQueue(q)) { printf('便道为空,无车辆可出!\n'); return; } Car c = q->data[q->front]; printf('车辆 %s 已从便道出去,未进入停车场\n', c.plateNum); if (q->front == q->rear) { q->front = q->rear = -1; } else { q->front = (q->front + 1) % MAX_SIZE; } }

//显示停车场车辆 void displayStack(Stack *s) { if (isEmptyStack(s)) { printf('停车场为空!\n'); return; } printf('停车场车辆如下:\n'); for (int i = s->top; i >= 0; i--) { printf('车牌号:%s,到达时间:%d\n', s->data[i].plateNum, s->data[i].arrivalTime); } }

//显示便道上车辆 void displayQueue(Queue *q) { if (isEmptyQueue(q)) { printf('便道上无车辆!\n'); return; } printf('便道上车辆如下:\n'); for (int i = q->front; i != q->rear; i = (i + 1) % MAX_SIZE) { printf('车牌号:%s,到达时间:%d\n', q->data[i].plateNum, q->data[i].arrivalTime); } printf('车牌号:%s,到达时间:%d\n', q->data[q->rear].plateNum, q->data[q->rear].arrivalTime); }

//车辆到达模块 void carArrival(Stack *s, Queue *q) { Car c; printf('请输入车牌号:'); scanf('%s', c.plateNum); c.arrivalTime = rand() % 24; //随机生成到达时间 if (isFullStack(s)) { enqueue(q, c); } else { push(s, c); } }

//车辆离开模块 void carDeparture(Stack *s, Queue *q) { pop(s, q); }

//系统主界面 void mainMenu(Stack *s, Queue q) { int choice; do { printf('\n'); printf('********************************\n'); printf(' 停车场管理系统主界面 \n'); printf(' 1. 车辆到达模块 \n'); printf(' 2. 车辆离开模块 \n'); printf(' 3. 显示停车场车辆 \n'); printf(' 4. 显示便道上车辆 \n'); printf(' 0. 退出系统 *\n'); printf('********************************\n'); printf('请输入您的选择:'); scanf('%d', &choice); switch (choice) { case 1: carArrival(s, q); break; case 2: carDeparture(s, q); break; case 3: displayStack(s); break; case 4: displayQueue(q); break; case 0: printf('谢谢使用,再见!\n'); break; default: printf('输入有误,请重新输入!\n'); break; } } while (choice != 0); }

int main() { Stack s; Queue q; initStack(&s); initQueue(&q); mainMenu(&s, &q); return 0; }

C语言停车场管理系统:使用栈和队列实现

原文地址: https://www.cveoy.top/t/topic/jjZc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录