当前位置: 首页 > news >正文

停车场问题

实验内容

1.问题描述:

设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆达到时间的先后顺序,依次由北向南排列(大门在最南端,最先达到的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆在按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。试为停车场编制按上述要求进行管理的模拟程序。

2.基本要求:

(1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“达到”或“离去”信息、汽车牌照号码以及达到或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆达到、则输出汽车在停车场内或便道上停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。

(2)菜单操作

测试数据

设n=2,输入数据为(“A”,1,5),(“A”,2,10),(“D”,1,15),(“A” ,3,20),(“D”,2,35),("E”,0,0),(“A”,1,5),其中 :“A”表示达到(Arrival);“D”表示离去(Departure);“E”表示输入结束(End)。

  1. 实现提示:

需另设一个栈,临时停放为要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包括两个数据项:汽车的牌照号码和进入停车场的时刻。

实验原理

1.车辆停入停车场的流程:

首先判断停车场的车位是否停满。两种情况:(1)停满时此时后来的车辆只能停在走道上(2)未停满时后来的车辆继续入栈。

2.车辆出站的思想。两种情况:(1)车辆在栈顶时,此时直接出栈而用不到辅助栈(2)车辆不在车顶时排在前面的车辆必须让位,此时它才能出栈,算法思想是首先根据输入的车牌号进行在栈中搜索,返还一个角标,根据角标来,找到出栈的车辆,这时前面的车辆入辅助栈,当循环的目标车辆时,这时不需要入辅助栈,直接出栈即可.

#include <stdio.h>
#include <stdlib.h> //用malloc时要声明,引入stdlib.h以使用malloc和realloc
#include <string.h> //字符串处理库,例如字符串的复制、连接、比较等 #define MAX_CARS 2 // 停车场最大容量
#define MAX_PLATE_LEN 10 // 汽车牌照最大长度// 定义汽车结构体
typedef struct {char plate[MAX_PLATE_LEN]; // 牌照号码int arrival_time; // 到达时间
} Car;// 顺序栈实现
typedef struct {Car cars[MAX_CARS]; // 停车场存放的汽车数组int top; // 栈顶指针
} Stack;// 链表节点
typedef struct Node {Car car; // 汽车struct Node* next; // 指向下一个节点
} Node;// 链表队列实现
typedef struct {Node* front; // 队首指针Node* rear; // 队尾指针
} Queue;// 初始化栈
void initStack(Stack* stack) {stack->top = -1; // 栈顶指针初始化为-1,表示栈为空
}// 判断栈是否满
int isStackFull(Stack* stack) {return stack->top == MAX_CARS - 1; // 栈满的条件
}// 判断栈是否空
int isStackEmpty(Stack* stack) {return stack->top == -1; // 栈空的条件
}// 入栈操作
void push(Stack* stack, Car car) {if (!isStackFull(stack)) { // 先检查栈是否满stack->cars[++stack->top] = car; // 将汽车入栈并更新栈顶指针}
}// 出栈操作
Car pop(Stack* stack) {if (!isStackEmpty(stack)) { // 先检查栈是否空return stack->cars[stack->top--]; // 返回栈顶汽车并更新栈顶指针}Car emptyCar = {"", 0}; // 返回一个空的汽车结构体,表示出栈失败return emptyCar;
}// 初始化队列
void initQueue(Queue* queue) {queue->front = queue->rear = NULL; // 队列前后指针初始化为NULL,表示队列为空
}// 判断队列是否空
int isQueueEmpty(Queue* queue) {return queue->front == NULL; // 队列为空的条件
}// 入队操作
void enqueue(Queue* queue, Car car) {Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点newNode->car = car; // 设置节点中的汽车信息newNode->next = NULL; // 新节点的next指针初始化为NULLif (isQueueEmpty(queue)) { // 如果队列为空queue->front = queue->rear = newNode; // 新节点既是队首又是队尾} else {queue->rear->next = newNode; // 将新节点添加到队尾queue->rear = newNode; // 更新队尾指针}
}// 出队操作
Car dequeue(Queue* queue) {if (!isQueueEmpty(queue)) { // 先检查队列是否空Node* temp = queue->front; // 暂存队首节点Car car = temp->car; // 获取队首的汽车信息queue->front = queue->front->next; // 更新队首指针free(temp); // 释放旧的队首节点if (queue->front == NULL) { // 如果队列变为空queue->rear = NULL; // 更新队尾指针}return car; // 返回出队的汽车信息}Car emptyCar = {"", 0}; // 返回一个空的汽车结构体,表示出队失败return emptyCar;
}// 查找并返回车辆在栈中的索引
int findCarInStack(Stack* stack, char* plate) {for (int i = stack->top; i >= 0; i--) { // 从栈顶向下查找if (strcmp(stack->cars[i].plate, plate) == 0) { // 找到匹配的车牌return i; // 返回车辆的索引}}return -1; // 未找到,返回-1
}// 主程序
int main() {Stack parking_lot; // 定义停车场栈Queue waiting_area; // 定义便道队列initStack(&parking_lot); // 初始化停车场initQueue(&waiting_area); // 初始化便道char command; // 命令变量Car car; // 当前处理的汽车int current_time; // 当前时间printf("请输入命令(A/D/E):\n");while (1) {scanf(" %c", &command); // 读取命令if (command == 'E') { // 如果命令是结束break; // 退出循环}scanf("%s %d", car.plate, &current_time); // 读取车牌和时间if (command == 'A') { // 如果是到达命令if (!isStackFull(&parking_lot)) { // 检查停车场是否已满car.arrival_time = current_time; // 记录到达时间push(&parking_lot, car); // 入栈printf("车辆 %s 停在停车场位置 %d\n", car.plate, parking_lot.top + 1);} else { // 停车场已满car.arrival_time = current_time; // 记录到达时间enqueue(&waiting_area, car); // 入队printf("车辆 %s 停在便道\n", car.plate);}} else if (command == 'D') { // 如果是离去命令int index = findCarInStack(&parking_lot, car.plate); // 查找车辆在栈中的位置if (index != -1) { // 如果找到// 将需要让路的车辆放入临时栈Stack temp_stack; // 辅助栈initStack(&temp_stack); // 初始化辅助栈for (int i = parking_lot.top; i > index; i--) { // 将需要让路的车辆入辅助栈push(&temp_stack, pop(&parking_lot)); // 从停车场出栈并入辅助栈}// 出栈目标车辆Car departed_car = pop(&parking_lot); // 目标车辆出栈int duration = current_time - departed_car.arrival_time; // 计算停留时间printf("车辆 %s 停留时间 %d,需支付费用 %d\n", departed_car.plate, duration, duration);// 将临时栈中的车辆恢复到停车场while (!isStackEmpty(&temp_stack)) {push(&parking_lot, pop(&temp_stack)); // 将辅助栈的车辆放回停车场}// 检查便道是否有车辆可以进入if (!isQueueEmpty(&waiting_area)) {Car next_car = dequeue(&waiting_area); // 从便道出队next_car.arrival_time = current_time; // 更新到达时间push(&parking_lot, next_car); // 入栈停车场printf("车辆 %s 从便道进入停车场,停在位置 %d\n", next_car.plate, parking_lot.top + 1);}} else {printf("车辆 %s 不在停车场内\n", car.plate); // 未找到车辆}}}return 0; // 程序结束
}

相关文章:

停车场问题

实验内容 1.问题描述&#xff1a; 设停车场是一个可停放n辆汽车的狭长通道&#xff0c;且只有一个大门可供汽车进出。汽车在停车场内按车辆达到时间的先后顺序&#xff0c;依次由北向南排列(大门在最南端&#xff0c;最先达到的第一辆车停放在车场的最北端)&#xff0c;若车场…...

海康相 机

海康机器人-机器视觉-下载中心 海康威视MVS客户端及虚拟相机c开发案例-CSDN博客 相机驱动下载&#xff1a; 下载中心 VisionMaster 视频教程_哔哩哔哩_bilibili 【VisionMaster】试用版安装说明_visionmaster试用版-CSDN博客 海康视觉算法平台VisionMaster 4.3.0 C# 二次…...

用map实现el-table全选

<el-button size"small" type"primary" click"searchProxy">查询</el-button><el-checkbox v-model"selectAll" change"changeSelectAll" >全选</el-checkbox><el-table:data"taskList&…...

【开源免费】基于SpringBoot+Vue.JS社区团购系统(JAVA毕业设计)

本文项目编号 T 024 &#xff0c;文末自助获取源码 \color{red}{T024&#xff0c;文末自助获取源码} T024&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…...

Java进阶之路:构造方法

&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d; &#x1f947;博主昵称&#xff1a;小菜元 &#x1f35f;博客主页…...

2025秋招八股文--网络原理篇

前言 1.本系列面试八股文的题目及答案均来自于网络平台的内容整理&#xff0c;对其进行了归类整理&#xff0c;在格式和内容上或许会存在一定错误&#xff0c;大家自行理解。内容涵盖部分若有侵权部分&#xff0c;请后台联系&#xff0c;及时删除。 2.本系列发布内容分为12篇…...

C#基础-面向对象的七大设计原则

目录 1.开放封闭原则&#xff08;OCP&#xff09; 2.单一职责原则&#xff08;SRP&#xff09; 3.依赖倒置原则&#xff08;DIP&#xff09; 4.里氏替换原则&#xff08;LSP&#xff09; 5.接口隔离原则&#xff08;ISP&#xff09; 6.合成复用原则&#xff08;CRP&#…...

CSS 容器查询一探究竟

引言 在 《请列举四种「等比例自适应矩形」实现方案&#xff1f;》 一文中我曾使用到容器查询单位 cqw, 当时在使用 cqw 过程中只是简单过了一下容器查询相关的内容!! 所以这次专门出一篇文章, 对容器查询做一个梳理… 一、是什么 在实际开发中您是否遇到过需要根据父容器的…...

AI论文写作:如何轻松实现高原创度大揭秘

随着人工智能技术的迅猛进步&#xff0c;AI论文写作工具在学术界开始崭露头角&#xff0c;作为一种辅助手段。这些工具不仅能高效地生成论文的初步版本或部分章节&#xff0c;而且其产出的内容往往展现出高度的创新性。本文将探讨AI论文写作工具为何能产出如此高原创度的内容&a…...

AtCoder Beginner Contest 375 A-E 题解

我的老师让我先做最后再交&#xff0c;看正确率&#xff08;即以OI赛制打abc&#xff09; 所以我用的小号&#xff08;… …&#xff09; C 卡了老半天才出来&#xff0c;我把题读错了 难度&#xff1a; A. Seats 题意 给你一个字符串 S S S&#xff0c;仅包含 . 和 #&…...

其他-自己手动更换汽车电磁进排气阀0.9.2

其他-自己手动更换汽车电磁进排气阀0.9.0 背景本次工具流程注意参考 2024年10月18日08:57:00—0.9.2 背景 昨天手动更换了电磁阀&#xff0c;记录下过程和注意事项&#xff0c;简单总结了一下 本次工具 10号套筒和工具老虎钳锤子一字改刀新的进排气电磁阀 流程 打开引擎盖…...

生成模型初认识

生成模型初认识 参考学习资料&#xff1a;李宏毅-机器学习 以下为课程过程中的简易笔记 生成模型 为什么要用生成模型&#xff1f;——创造力&#xff1a;同一个输入&#xff0c;产生不同的输出&#xff08;distribution&#xff09;&#xff0c;有一定概率发生某种随机事件…...

Java中的一些名词概念

**函数式接口:** 概念&#xff1a;一个接口中的抽象方法只有一个&#xff0c;那么这个接口就是一个函数式接口。形参: 形参变量是**功能函数里的变量**&#xff0c;只有<u>在被调用的时候才分配内存单元</u>&#xff0c;<u>调用结束后立即释放</u>。…...

沈阳乐晟睿浩科技有限公司:引领抖音小店迈向新纪元

在当今数字化浪潮汹涌的时代&#xff0c;电子商务以其独特的魅力和无限潜力&#xff0c;正深刻改变着人们的消费习惯与商业模式。在这场变革中&#xff0c;沈阳乐晟睿浩科技有限公司凭借其敏锐的市场洞察力和卓越的技术实力&#xff0c;成为了抖音小店领域的佼佼者&#xff0c;…...

[图形学]蒙特卡洛积分方法介绍及其方差计算

一、简介 本文介绍了蒙特卡洛积分算法的基本原理和其误差计算。 二、蒙特卡洛积分介绍 1. 介绍 蒙特卡洛积分算法是一种数值积分算法&#xff0c;用于对复杂函数进行积分。 例如&#xff0c;对于目标积分函数&#xff1a; ∫ a b f ( x ) d x (1) \int_{a}^{b}f(x)\rm{d}x…...

智慧社区Web解决方案:Spring Boot框架探索

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于web的智慧社区设计与实现的相关信息成…...

基于预测算法的航班离港延误系统

毕业设计不知道做什么&#xff1f;想找一个结合算法与应用的项目&#xff1f;那你绝对不能错过这个"基于预测算法的航班离港延误系统"&#xff01;✈️&#x1f4ca; 项目简介&#xff1a; 这个系统专注于航班离港的延误预测&#xff0c;通过强大的神经网络技术对大…...

【汇编语言】寄存器(内存访问)(七)—— CPU提供的栈机制

文章目录 前言1. CPU提供的栈机制2. push指令3. 问题4. 问题的分析与解答5. pop指令结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深…...

webAPI中的节点操作、高级事件

一、节点操作 1.删除节点 node.removeChild(); 方法从node节点中删除一个子节点&#xff0c;返回删除的节点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...

C++内存对齐机制简介

C内存对齐机制是指数据在内存中按照特定规则进行排列&#xff0c;这个机制可以提高访问效率并且满足硬件访问特性。 C内存对齐机制的一些关键规则如下&#xff1a; 不同类型的数据在内存中的起始地址应该是其大小的倍数。比如&#xff0c;4字节的整型应该存放在地址是4的倍数…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...