数据结构之队列的应用-超好玩的汽车加油站模拟器(C语言)

本文介绍了如何使用C语言设计一个汽车加油站模拟器,通过循环队列管理入口、加油和出口队列,模拟车辆进出站的过程。重点在于队列结构体的设计以及指挥车辆进行加油等操作的实现。文章还鼓励读者尝试简化代码中的多层嵌套逻辑。
摘要由CSDN通过智能技术生成

----------------------✨🎉🎈==!!!热烈欢迎各位大佬!!!==🎈🎉✨---------------------

🍹作者: BooleanChar12

博客主页BooleanChar12的博客

💘很喜欢的一句话Because we all stand on the shoulders of giants.

🥂如有bug疑惑欢迎大家与我🤺

😍觉得博主文章写的不错的话,希望大家三连(🎉关注,🎉点赞,🎉评论),多多支持一下!!

--------------------------------------------------------------------------🍻==专栏回顾==🍻-------------------------------------------------------------------------------

Java(从入门到放弃) 🍉数据结构(从放弃到入门) 🍒Android开发(从入门到入土)
🍇计算机组成原理(从1到0) 🍑计算机网络(从上网到退网) 🥝操作系统(从0到0.1)
🍎C语言练习题 🏆Leetcode(狂刷笔记) 🌺微信小程序开发日记

1.文章概要📕:

🧡💛💚本篇文章带你实现超好玩的汽车加油站模拟器,带你体验一次指挥车辆🚗的感觉!🧡💛💚

2.设计思路💡:

  1. 三个队列(入口队列[3],加油队列[3],出口队列[3]) 3指每个队列最大容纳3辆车,由于使用循环队列,并且是空一位来判断队列是否满,所以实际队列大小为4
  2. 提供三个主要操作供加油站指挥人员选择(指挥用户进入加油站,指挥加油,指挥用户驶出加油站)(具体思路已经写在注释中)

3.重点难点🌈:

  1. 队列的结构体中包含的是一个Car类型的指针
  2. Car结构体中包含的是一个存放车牌的字符数组
  3. 三个主要操作的实现,尤其是指挥加油操作(if的多层嵌套,一定要思路清晰)

4.效果展示🎬:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.代码实现💎:

# include <stdio.h>
# include <malloc.h>
/*
设计思路:
1.三个队列(入口队列[3],加油队列[3],出口队列[3])  3指每个队列最大容纳3辆车,
  由于使用循环队列,并且是空一位来判断队列是否满,所以实际队列大小为4
2.提供三个主要操作供加油站指挥人员选择(指挥用户进入加油站,指挥加油,指挥用户驶出加油站)
*/


//定义Car结构体
typedef struct {
   
	char carName[20];//车牌号码   如琼BQQ666  晋AQB888
} Car;

//定义队列结构体
typedef struct {
   
	Car * base;//指向动态分配内存的首地址,且只能指向Car类型的结构体地址
	int front;//头指针
	int rear;//尾指针
} SqQueue;

//1.队列初始化
int InitQueue(SqQueue &Q) {
   
	Q.base = (Car *)malloc(4*sizeof(Car));//动态创建连续的内存空间并将此内存空间的首地址赋给Q队列的base指针,即Q队列的base指针指向了这块连续的内存空间
	if(!Q.base) {
    //判断能不能在内存中找到这样一块连续空间,没有找到就返回-1
		printf("内存溢出,无法开辟空间!");
		return -1;
	}
	//如果找到了,就让Q队列的头指针和尾指针都等于0,即指向base[]数组的0的位置,即那块内存空间的首地址
	Q.front=Q.rear=0;
	printf("加油站场景初始化成功!\n");
	return 0;
}

//2.指挥车辆在加油站入口等待
int ComeIn(SqQueue &Q) {
    //这里传入的队列应为入口队列
	//入队的时候首先需要判断队列是否满了
	if((Q.rear+1)%4==Q.front) {
   
		printf("当前入口车辆已排满,请指挥车辆进行加油!\n");
		return -1;
	}
	Car input;//定义input变量接收用户输入的入队元素,用Car声明的变量的空间是由系统自动分配的,当然这里也可以使用malloc动态创建内存空间
	printf("请输入进入入口的车辆的车牌号:\n");
	scanf("%s",&input.carName);
	Q.base[Q.rear] = input;//从队尾入队,把输入的数据放到Q队列的base数组的下标为Q.rear的位置
	Q.rear = (Q.rear+1)%4;
	return 0;
}

//3.指挥加油
int Working(SqQueue &Q,SqQueue &C,SqQueue &O) {
   
	/*
	1.入口车队不空,加油车队不满,出口车队不满:入口车辆出队,出队车辆进入加油车队,车队加油,加油完成进入出口车队
								  出口车队已满:入口车辆出队,出队车辆进入加油车队,车队加油,但不进入出口车队,提示进行车辆出口操作
					加油车队已满,出口车队不满:加油车队出队,进入出口车队,提示加油车队已满,哪辆车进入出口处
								  出口车队已满:提示加油车队已满,出口车队已满,直接提示进行车辆出口操作
	2.入口车队空,加油车队不满,出口车队不满ÿ
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BooleanChar12

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

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

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

打赏作者

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

抵扣说明:

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

余额充值