数据结构实验——模拟停车场系统(栈,队列)

数据结构——C语言编写简单的停车场管理系统(栈和链队实现) 标题:C语言编写简单的停车场管理系统 1.问题描述 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出,汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端.最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的边道上等候,一旦有车离开,则排在边道上的第一辆车即可开入停车场。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进人车场,每辆停放在车场的车在它离开停车场时必须按它停留的 阅读详情

问题描述:
设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在车场的最北端),若车场内已停满n辆车,那么后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆汽车要离开时,在它之后进入的车辆必须先退出停车场按顺序开入临时停放道为其让路,待其开出大门外后,再按原次序进入车场,每辆停放在停车场的汽车在它离开停车场时必须按其停留的时间长短缴纳费用(从进入停车场开始计费)。
示意图:
在这里插入图片描述
具体代码:

#include<iostream>
#include<malloc.h>
using namespace std;
#define N 3
#define M 4
#define Price 2
typedef struct{
	int CarNo[N];
	int CarTime[N];
	int top;
}SqStack;
typedef struct{
 	int CarNo[M];
 	int front,rear;
 }SqQueue;
void InitStack(SqStack *&s){
 	s=(SqStack *)malloc(sizeof(SqStack));
 	s->top=-1;
 }
bool StackEmpty(SqStack *s){
	return(s->top==-1);
}
bool StackFull(SqStack *s){
	return(s->top==N-1);
}
bool Push(SqStack *&s,int e1,int e2){
	if(s->top==N-1){
		return false;
	}
	s->top++;
	s->CarNo[s->top]=e1;
	s->CarTime[s->top]=e2;
	return true;
}
bool Pop(SqStack *&s,int &e1,int &e2){
	if(s->top==-1){
		return false;
	}
	e1=s->CarNo[s->top];
	e2=s->CarTime[s->top];
	s->top--;
	return true;
}
void DispStack(SqStack *s){
	for(int i=s->top;i>=0;i--){
		cout<<" "<<s->CarNo[i];
	}
	cout<<endl;
}
void InitQueue(SqQueue *&q){
	q=(SqQueue *)malloc(sizeof(SqQueue));
	q->front=q->rear=0; 
}
bool QueueEmpty(SqQueue *&q){
	return(q->front==q->rear);
}
bool QueueFull(SqQueue *&q){
	return((q->rear+1)%M==q->front);
}
bool enQueue(SqQueue *&q,int e){
	if((q->rear+1)%M==q->front){
		return false;
	}
	q->rear=(q->rear+1)%M;
	q->CarNo[q->rear]=e;
	return true;
}
bool deQueue(SqQueue *&q,int &e){
	if(q->front==q->rear){
		return false;
	}
	q->front=(q->front+1)%M;
	e=q->CarNo[q->front];
	return true;
}
void DispQueue(SqQueue *q){
	int i=(q->front+1)%M;
	cout<<" "<<q->CarNo[i];
	while((q->rear-i+M)%M>0){
		i=(i+1)%M;
		cout<<" "<<q->CarNo[i];
	}
	cout<<endl;
}

int main(){
	int comm,i,j;
	int no,e1,time,e2;
	SqStack * St,* St1;
	SqQueue * Qu;
	InitStack(St);
	InitStack(St1);
	InitQueue(Qu);
	for(;;){
		cout<<"请输入指令:"<<endl;
		cout<<"	1:车到达"<<endl;
		cout<<"	2:车离开"<<endl;
		cout<<"	3:停车场状态"<<endl;
		cout<<"	4:候车场状态"<<endl;
		cout<<"	5:查询停车位与候车位数量以及停车场费用明细"<<endl; 
		cout<<"	0:结束系统"<<endl;
		cout<<"你的指令为:";
		cin>>comm;
		cout<<"----------------------------------------"<<endl;
		switch(comm){
			case 1:{
				cout<<" 车号:";
				cin>>no;
				cout<<" 到达时间:";
				cin>>time;
				if(!StackFull(St)){
					Push(St,no,time);
					cout<<" 停车场的位置是:"<<St->top+1<<endl;
				}
				else 
				{
					if(!QueueFull(Qu)){
						enQueue(Qu,no);
						cout<<" 候车场的位置是:"<<Qu->rear<<endl;
					}else{
						cout<<" 停车场和候车场都已满,无法停车,请离开"<<endl;
					}
				}
				break;
			}
			case 2:{
				cout<<" 车号:";
				cin>>no;
				cout<<" 离开时间:";
				cin>>time;
				for(i=0;i<=St->top&&St->CarNo[i]!=no;i++);
				if(i>St->top){
					cout<<" 未找到该编号的汽车"<<endl;
				}else{
					for(j=i;j<=St->top;j++){
						Pop(St,e1,e2);
						Push(St1,e1,e2);
					}
					Pop(St,e1,e2);
					cout<<" 车号为"<<no<<"的汽车停车的费用为:"<<(time-e2)*Price<<endl;
					while (!StackEmpty(St1)){ 
						Pop(St1,e1,e2);
						Push(St,e1,e2);
					}
					if(!QueueEmpty(Qu)){
						deQueue(Qu,e1);
						Push(St,e1,time);
					}
				}
				break;
			}
				case 3:{
					if(!StackEmpty(St)){
						cout<<" 停车场中的车辆:";
						DispStack(St);
					}
					else{
						cout<<" 停车场现在无车"<<endl;
					}
					break;
				}
				case 4:{
					if(!QueueEmpty(Qu)){
						cout<<" 候车场中的车辆:";
						DispQueue(Qu);
					}
					else{
						cout<<" 候车场现在无车"<<endl;
					}
					break;
				}
				case 5:{
					cout<<"停车位有:"<<N<<"个"<<endl;
					cout<<"候车位有:"<<M-1<<"个"<<endl;
					cout<<"停车及候车的费用为:"<<Price<<"元每小时"<<endl;
					cout<<"----------------------------------------"<<endl;
					break;
				} 
				case 0:{
					exit(1);
				}
		}
	}
	return 1;
}

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据结构实验--停车场管理 一、题目描述设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车放在车场的最北端)。若车场内已放满n辆车,则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆汽车要离开时,在它之后进入的车辆都必须先退出车场为它让路,待该辆车开出大门外后,其它车辆再按原次... 阅读详情

相关推荐

C++设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序依次排列。

若车场内已停满n辆汽车,则后来的汽车只能在门外便道上等候,一旦有车开走, 则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车 辆必须先退出车场为它让路,该车开出后,其它车辆再按原次序进入车场,每辆停放 在车场的车在它离开时必须按它停留的时间长短交纳费用。 头文件: #include<iostream> #include <string> #include <time.h> #include <stdlib.h> #include&

今天你学习了吗的博客 7698

c++栈和队列的应用(停车问题)

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

qq_51133701的博客 2347

数据结构实训——停车场系统

这个程序是利用栈和循环队列实现的,自己得先处理好逻辑关系就好了。由于题目没有要求,这个程序就没加重复判断,比如一辆车已经停在车位上或者便道上,再来一辆就判断不了了。关于栈,就是先进后出的思想,队列就是先进先出的思想。这个程序自己没用链栈和链队列做,因为感觉比较耗时。不过栈和队列的运用大多数都是用数组,先掌握好数组的表示再用链表写上手也很快。 **项目要求:**停车场是一个能放 n 辆车的狭长通道,...

林鹏 1323

停车场 管理

c 语言底层版

weixin_63333602的博客 1527

栈与队列实现的停车场系统

停车场项目需求 问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要停在门           外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车  要先退出,待它走后在依次进入。汽车离开时按停放时间收费。 基本功能要求:           (1)建立三个数据结构分别是:停放栈、让

fwq_qwert的博客 623

JAVA简单实现停车场系统

用栈实现车库管理,队列实现便道,简单的停车场管理系统

SHENGLI_509的博客 1万+

用栈和队列实现虚拟停车场系统

学校的数据结构课程实验之一。 用到的数据结构:栈、队列   设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序依次排列。   若车场内已停满n辆汽车,则后来的汽车只能在门外便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,该车开出后,其它车辆再按原次序停回。

helena_wang的专栏 1825

C语言栈与队列教学实践:停车场系统源码深度解析

栈和队列是数据结构中最基础又最易混淆的两种线性抽象,其核心差异在于存取顺序约束——栈遵循后进先出(LIFO),队列强调先进先出(FIFO)。理解二者不仅需要掌握push/pop、enqueue/dequeue等操作原理,更需洞察其在内存中的映射方式与工程落地边界。本例以经典停车场调度为载体,用纯C语言通过数组+下标模拟双结构协同:停车场为栈(车辆后入先出)、便道为队列(先到先服务),全程规避高级封装,直面内存布局、输入缓冲、整型溢出与越界访问等底层细节。它不追求功能完备,而聚焦‘如何用最简原语表达抽象逻辑’

weixin_32932149的博客 248

数据结构实验-停车场模拟系统

说明: 在大二小学期,老师布置了一个数据结构实验,小组成员花了大概一周完成了实验,代码可能有不少bug,望指出,谢谢。 问题描述: 模拟一个停车场系统。停车场根据停车的占地面积进行收费。我们假设一个停车场存在大、中、小三种车型的停车位。当有车辆进入停车场时,登记车的型号,车牌以及时间,并将车停放在停车场内。当取车时,输入车牌号,取出相应的车,并记录现在时间,根据停车时间收取费用。

hungryfoolisher的博客 7029

C语言停车场系统:栈与队列协同建模实战

栈和队列是数据结构中最基础的线性抽象,其核心差异在于访问约束(LIFO vs FIFO);在真实工程中,二者常非孤立使用,而是通过状态驱动形成耦合模型。例如停车场管理系统,本质是以栈(In)为状态中心、以另一栈(Out)为临时缓存、以链式队列(Wait)为外延缓冲的三体协同结构——这种主从嵌套关系决定了所有操作必须围绕In栈top指针做原子校验。它不仅体现内存管理、指针安全、边界控制等C语言核心能力,更广泛应用于任务调度、缓冲区管理、事件排队等嵌入式与系统编程场景。本文即以可运行的C语言停车场系统为载体,解

weixin_33428613的博客 212

C语言停车场模拟器:用数组手写栈与队列的工程实践

栈与队列是数据结构中最基础的线性抽象,其核心在于后进先出(LIFO)与先进先出(FIFO)的逻辑约束。在真实系统中,这类抽象需映射为内存布局、状态同步与边界控制等底层机制。本案例以纯C实现的停车场模拟器为载体,揭示如何用结构体数组替代标准容器、用游标计数模拟栈顶指针、用线性扫描实现入栈/出栈语义——既规避了高级封装的黑盒性,又直击手动内存管理、输入缓冲区处理、数组越界防护等工程痛点。适用于数据结构入门者理解抽象模型落地,也适合嵌入式或教学场景下训练防御性编程思维。

weixin_32325225的博客 201

课设-停车场管理(栈和队列的应用)

停车场管理(栈和队列的应用) 1.问题描述 [题目描述] 设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车...

a201808064823的博客 1319

Java停车场管理系统栈与队列实战设计

随着城市化进程的加快,停车资源日益紧张,Java停车场管理系统应运而生。该系统旨在通过信息化手段提升停车场的管理效率与用户体验。其核心功能模块包括:车辆入场管理、车位状态监控、车辆退场结算及等待队列调度。在设计目标上,系统追求高并发处理能力、良好的扩展性与稳定的数据交互机制。在技术实现上,系统广泛使用栈(Stack)与队列(Queue)这两种基础数据结构。

weixin_31860973的博客 669

数据结构课程设计(二)停车场管理:便道-队列,停车场-栈,临时停车场-栈。

汽车在停车场内进出是按照栈的运算方式来实现的,先到的先进停车场;停车场的汽车离开停车场时,汽车场内其它汽车为该辆汽车让路,也是按栈的方式进行;汽车在便道上等候是按队列的方式进行的。因此,将停车场设计成一个栈,汽车让路也需要另一个栈来协助完成,汽车进出便道用队列来实现。 本设计,栈采用顺序栈结构,队列用链式存储结构。 #include <bits/stdc++.h> using namespace std; #define stacksize 5 typedef struct sqst

小绵杨 2470

某商场有一个100个车位的停车场,当车位未满时,等待的车辆可以进入并计时;当车位已满时,必须有车辆离开,等待的车辆才能进入

数据结构课程设计 某商场有一个100个车位的停车场,当车位未满时,等待的车辆可以进入并计时;当车位已满时,必须有车辆离开,等待的车辆才能进入;当车辆离开时计算停留的的时间,并且按照每小时1元收费。 汽车的输入信息格式可以是(进入/离开,车牌号,进入/离开时间),要求可以随时显示停车场内的车辆信息以及收费历史记录。

数据结构c语言版课程设计停车场管理系统方案.doc

数据结构c语言版课程设计停车场管理系统方案.doc

上一篇: C++(分数类,进行加减乘除的运算并化简)
下一篇: C++资料(一)——初步认识C++
FFFPAG
博客等级 码龄7年 109粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FFFPAG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值