----------------------✨🎉🎈==!!!热烈欢迎各位大佬!!!==🎈🎉✨---------------------
🍹作者: BooleanChar12
✨博客主页: BooleanChar12的博客
💘很喜欢的一句话: Because we all stand on the shoulders of giants.
🥂如有bug和疑惑欢迎大家与我🤺
😍觉得博主文章写的不错的话,希望大家三连(🎉关注,🎉点赞,🎉评论),多多支持一下!!
--------------------------------------------------------------------------🍻==专栏回顾==🍻-------------------------------------------------------------------------------
☕Java(从入门到放弃) 🍉数据结构(从放弃到入门) 🍒Android开发(从入门到入土) 🍇计算机组成原理(从1到0) 🍑计算机网络(从上网到退网) 🥝操作系统(从0到0.1) 🍎C语言练习题 🏆Leetcode(狂刷笔记) 🌺微信小程序开发日记
1.文章概要📕:
🧡💛💚本篇文章带你实现超好玩的汽车加油站模拟器,带你体验一次指挥车辆🚗的感觉!🧡💛💚
2.设计思路💡:
- 三个队列(入口队列[3],加油队列[3],出口队列[3]) 3指每个队列最大容纳3辆车,由于使用循环队列,并且是空一位来判断队列是否满,所以实际队列大小为4
- 提供三个主要操作供加油站指挥人员选择(指挥用户进入加油站,指挥加油,指挥用户驶出加油站)(具体思路已经写在注释中)
3.重点难点🌈:
- 队列的结构体中包含的是一个Car类型的指针
- Car结构体中包含的是一个存放车牌的字符数组
- 三个主要操作的实现,尤其是指挥加油操作(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.入口车队空,加油车队不满,出口车队不满ÿ