数据结构实验二停车场

内容仅供个人复习
*设停车场内只有一个的停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车
在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第
一辆车停放在车场的最北端),若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道
上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,
在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序
进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为
停车场编制按上述要求进行管理的模拟程序。
[测试数据]
设 n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3, 20),
(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。
其中,‘A’表示到达;‘D’表示离去,‘E’表示输入结束。
[基本要求]
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟
管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到
达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车
在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳
的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。
[实现提示]
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存
储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数
据项:汽车的牌照号码和进入停车场的时刻。
*

#include<iostream>
#define MAXSIZE 100
using namespace std;
//收费标准每小时2元 
int n;
int cnt;//计数器 
typedef struct Car
{int num;int arr = 0;
}Car;typedef struct Stack
{Car *top;Car *base;int stacksize;}SqStack;typedef struct
{Car *bear;int front;int rear;
}SqQueue;SqStack s;SqStack s1; SqQueue Q;void Init(SqStack &s)
{s.stacksize = MAXSIZE;s.top = new Car[MAXSIZE];s.base = s.top;
}
void Init2(SqQueue &Q)
{Q.bear = new Car[MAXSIZE];Q.front = Q.rear = 0;
}void Push(SqStack &s , int number , int time) // 车进停车场 
{s.top++;cout<<"停车位置:"<<cnt<<'\n';s.top ->num = number;s.top ->arr = time;
}void Push_Queue(SqQueue &Q , int number , int time) //停车位不够,进入队列 
{if((Q.rear + 1 ) % MAXSIZE == Q.front) {cout<<"队满"<<'\n';return ;}Q.bear[Q.rear].num = number;Q.bear[Q.rear].arr = time;Q.rear = (Q.rear + 1) % MAXSIZE;}
void Pop_Queue(SqQueue &Q , int time)//从队列中进入停车场 
{	if(Q.front == Q.rear) return;//空队列,表示外面没有等待的车辆 s.top++;*s.top = Q.bear[Q.front];s.top->arr = time;Q.front = (Q.front + 1) % MAXSIZE;}void push_2(Car &c)//外面的车出去让里面的车走,进入中转栈 
{s1.top++;*s1.top = c;
}void Pop_2( SqStack &s1 , SqStack &s)//从中转站进入停车场 
{while(s1.top != s1.base){s.top++;*s.top = *s1.top;s1.top--;}}void Pop(SqStack &s , int number , int time)//出停车场 
{cnt--;int flag = 0;while(s.top ->num != number){flag = 1;push_2(*s.top);s.top--; }cout<<"时间:"<<time - s.top ->arr<<" 费用:"<<(time - s.top ->arr) * 2<<'\n';s.top--;if(flag) Pop_2(s1,s);Pop_Queue(Q,time);}int main()
{Init(s);Init(s1);Init2(Q);cout<<"输入总车辆数:"<<'\n';cin>>n;//表示车辆总数char op;int number;int time;while(1){cin>>op>>number>>time;if(op == 'E') break;if(op == 'A')	cnt++;if(cnt > n)// 满了 加进队列里 {if(op == 'A'){cout<<"进入队列"<<'\n';Push_Queue(Q,number,time);}else if(op == 'D'){Pop(s,number,time);}	}else{if(op == 'A'){Push(s,number,time);}else if(op == 'D'){Pop(s,number,time);}	}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux硬盘挂载(linux 修改某个磁盘挂载到新目录\lvm扩容)

文章目录 一、什么是硬盘挂载二、linux 修改某个磁盘挂载到新目录三、Esxi下扩容硬盘1. 判断一个已有的文件系统是否使用了LVM(逻辑卷管理)2. 原本文件系统没有使用lvm&#xff0c;还可以lvm扩容吗&#xff1f;3. 原有文件系统使用lvm场景下扩容(lvm扩容)了解LVMEsxi LVM扩容步…

NOIP2000提高组第二轮T4:方格取数

题目链接 [NOIP2000 提高组] 方格取数 题目描述 设有 N N N \times N NN 的方格图 ( N ≤ 9 ) (N \le 9) (N≤9)&#xff0c;我们将其中的某些方格中填入正整数&#xff0c;而其他的方格中则放入数字 0 0 0。如下图所示&#xff08;见样例&#xff09;: 某人从图的左上…

ES 报错问题汇总

报错1&#xff1a; curl -XGET http://192.168.56.115:9200/_license解决方式 在 es/config/elasticsearch.yml文件,把开启密码验证把此处也修改成false xpack.security.enabled: false 报错2&#xff1a; 解决方式&#xff1a; 查看服务器es的license信息&#xff0c;发现 …

用「埋点」记录自己,不妄过一生

最近有朋友问我「埋点怎么做」&#xff0c;给朋友讲了一些互联网广告的案例&#xff0c;从源头的数据采集讲到末尾的应用分析和流量分配等&#xff08;此处省略N多字&#xff09; 解释完以后&#xff0c;我想到一个问题&#xff1a;有了埋点可以做分析&#xff0c;那我们对自己…

lvs dr+keepalived

基于keepalived(主从双主) LVS(DR模型) DNS实现http高可用集群 keepalived高可用主机IP&#xff1a;172.21.5.22和172.21.5.21 http服务高可用主机IP&#xff1a;172.21.5.16和172.21.5.18 VIP采用172.16.32.5 各虚拟机及主机名和IP对应关系如下所示&#xff1a; 虚拟机主机…

Java中使用 MD5 工具进行对密码进行加密

基于MD5 的双重加密 package com.goods.springbootmybatisgoods.util;import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;/*** MD5加密工具类*/ public class MD5Util {/*** 生成盐值* param source 需要加密的字符串* return 加密后的字符…

机器学习概论

一、机器学习概述 1、机器学习与人工智能、深度学习的关系 人工智能&#xff1a;机器展现的人类智能机器学习&#xff1a;计算机利用已有的数据(经验)&#xff0c;得出了某种模型&#xff0c;并利用此模型预测未来的一种方法。深度学习&#xff1a;实现机器学习的一种技术 2…

牛客网 CM11.链表分割

目录 1.解题思路2.代码实现 1.解题思路 此题目思路相对简单&#xff0c;利用双指针&#xff0c;一个指针指向小于val的&#xff0c;一个指针指向大于等于val的&#xff0c;但实现起来&#xff0c;如果仅仅使用单链表&#xff0c;那么还需特别判断第一个指针是否为空从而特意做…

yum

什么是yum? Linux中我们也要进行工具/指令/程序&#xff0c;安装&#xff0c;检查卸载等&#xff0c;需要yum的软件 安装软件的方式&#xff1a; 1.源代码安装--交叉编译工作 2.rpm包直接安装 3.yum / apt-get yum:yum是我们linux预装的一个指令&#xff0c;搜索&#x…

【数据结构】顺序表和链表

顺序表和链表 1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0c;也就说是连…

uniapp 省市区三级联动选择器

还有半个小时下班&#xff0c;总想着发点光亮照耀他人。IT技术这东西&#xff0c;尤其是UI方面的东西&#xff0c;于用户体验至关重要&#xff0c;想想最近使用uni-data-picker的丑陋页面&#xff0c;自己重构了这个功能&#xff0c;新加实现&#xff0c;效果图如下&#xff0c…

SRC实战 | CORS跨资源共享漏洞

CORS跨资源共享 跨源资源共享 (CORS) 是一种浏览器机制&#xff0c;允许网页使用来自其他页面或域的资产和数据。 大多数站点需要使用资源和图像来运行它们的脚本。这些嵌入式资产存在安全风险&#xff0c;因为这些资产可能包含病毒或允许服务器访问黑客。 CORS响应头 CORS通…

类(class)

类是 C中一个非常重要的元素&#xff0c;可以说是 C的灵魂所在了&#xff0c;我们都知道 C说一种面向对象的编程语言&#xff0c;那么面向对象是一种什么概念呢&#xff1f;在 C程序设计中&#xff0c;所有一切东西都可以称之为对象&#xff0c;任何对象都应该具有属性和行为。…

C++基础——类与对象

1 概述 C是面向对象的语言&#xff0c;面向对象语言三大特性&#xff1a;封装、继承、多态。 C将万事万物抽象为对象&#xff0c;对象上有其属性和行为。 2 封装 2.1 封装的意义 封装是面向对象的三大特性之一&#xff0c;封装将属性和行为作为一个整体&#xff0c;对属性和…

灵活调整宣传策略,媒体发稿和新闻发布的优势所在

企业在当今信息爆炸的时代&#xff0c;要想在市场竞争中脱颖而出&#xff0c;提高公信力是至关重要的。而媒体发稿和新闻发布是提升企业公信力的重要手段之一。下面将从门户网站的权威展示、搜索引擎排名的提升、内容的持续稳定有效性、内容的可改性以及协助增加网站流量等方面…

浅谈自动化测试框架开发

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Linux中for循环

for do done 复习知识点&#xff1a;cut命令&#xff0c;id命令&#xff0c;finger命令&#xff0c;for循环 程序如上&#xff0c;-d 接分隔符&#xff0c;-f后的数字表示分隔后的列 从结果可以看出&#xff0c;系统上没有finger这个命令&#xff0c;后面会学到yum安装命令&a…

简简单单地合并子表表格(python自动化办公)

简简单单地合并子表表格&#xff08;python自动化办公&#xff09; 需求分析&#xff1a; 1.存在两张表格&#xff0c;一张为主表 一张为次表 2.以主表的子表为合并的主要对象&#xff0c;次表来补充主表的信息代码&#xff1a; # 处理老师的高级报表&#xff0c;数据处理 表…

ERROR in static/js/xxx.js from UglifyJs Unexpected token name «currentVersion»

添加链接描述 ERROR in static/js/xxx.js from UglifyJs Unexpected token name currentVersion, expected punc 遇到这种异常, 需要运行下面脚本运行npm i -D uglifyjs-webpack-pluginbeta修改webpack.prod.conf.jsjs中引入参数const UglifyJsPlugin require(uglifyjs-webpa…

Python---字符串的修改方法---replace()替换

修改字符串&#xff0c;指的就是通过函数&#xff08;方法&#xff09;的形式修改字符串中的数据。 编号函数作用1replace()返回替换后的字符串2split()返回切割后的列表序列3capitalize()首字母大写4title()所有单词首字母大写5upper()与lower()返回全部大写或小写的字符串6l…