数据结构停车场管理(作业
  hI6KHgNRyc1X 2023年11月02日 31 0
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


#define N 2
//定义停车场能停多少车
#define Max 100
//定义能停多少辆等待车辆


typedef struct
{
	char status;//车辆状态
	int num;//车辆序号
	int time;//此状态时车辆所处时间
}Car;


//创建一个存储n的顺序栈  停车场
typedef struct
{
	Car parking[N];//数组,存放汽车数据
	int top;
}Parking;


//创建一个让路栈
typedef struct
{
	Car makeway[N];
	int top;
}Makeway;


//创建一个链队列,存放等待车辆
typedef struct Wait
{
	Car wait;
	struct Wait* next;
}Wait;

typedef struct
{
	Wait* front, * rear;
}Waitlink;

//所需函数都有什么
//	进入停车场函数,停车场初始化
//	进入等待区函数,等待区初始化
//离开函数,后续车辆从停车场进入等待区,车辆离开,后续车辆依次进入停车场
//	判断栈空函数
//	判断栈满函数
//注意时间!!还有车辆序号,还要输入车辆信息

//判断栈空函数,栈空返回1
int PEmpty(Parking* p)
{
	if (p->top >= 0)
		return 0;
	else
		return 1;
}
int MEmpty(Makeway* m)
{
	if (m->top >= 0)
		return 0;
	else
		return 1;
}


//判断栈满函数,栈满返回1
int PFull(Parking* p)
{
	if (p->top == N - 1)
		return 1;
	else
		return 0;
}
int MFull(Makeway* m)
{
	if (m->top == N - 1)
		return 1;
	else
		return 0;
}

//初始化等待区函数
void PreWait(Waitlink* wl)
{
	wl->front = (Wait*)malloc(sizeof(Wait));//申请等待区空间
	wl->rear = wl->front;
	wl->front->next = NULL;//初始化
}

//初始化让路区
void Premakeway(Makeway* mw)
{
	mw->top = -1;
}


//初始化停车场函数
void PreParking(Parking* p)
{
	p->top = -1;
}

//进入停车场函数
void Intopark(Car* c, Parking* p)
{
	p->top++;
	p->parking[p->top].num = c->num;
	p->parking[p->top].status = c->status;
	p->parking[p->top].time = c->time;
}

//进入等待区函数
void Intowait(Car* c, Waitlink* wl)
{
	wl->rear->next = (Wait*)malloc(sizeof(Wait));//申请空间
	wl->rear = wl->rear->next;
	wl->rear->wait.num = c->num;
	wl->rear->wait.status = c->status;
	wl->rear->wait.time = c->time;
	wl->rear->next = NULL;
}


//判断是否有这辆车的函数,有输出1,没有输出0
int Ifthecar(Parking* p, Car* c)
{
	int i = 0;
	while (i < p->top + 1)
	{
		if (p->parking[i].num == c->num)
		{
			return 1;
		}
		i++;
	}
	return 0;
}


//等待区车辆进入停车场
void Waitintopark(Parking* p, Waitlink* wl,int t1)
{
	if (wl->front == wl->rear)//等待区没有车辆时
	{
		printf("等待区没有车辆在等待\n");
	}
	else
	{
		printf("车牌号为%d的车辆从等待区驶出\n", wl->front->next->wait.num);
		
		//进入停车场
		p->top++;



		p->parking[p->top].num = wl->front->next->wait.num;
		p->parking[p->top].status = wl->front->next->wait.status;
		p->parking[p->top].time = t1;
		printf("车牌号为%d的车辆进入停车场\n", wl->front->next->wait.num);

		//驶出
		if (wl->front->next == wl->rear)
		{
			wl->front = wl->rear;
		}
		else
			wl->front = wl->front->next;

	}
}


//车辆离开函数,返回总时间
int Outpark(Car* c, Parking* p, Makeway mw)
{
	
	int t = 0;
	int i = 0;
	for (i = 0; i < p->top; i++)
	{
		while (p->parking[i].num != c->num)
		{
			i++;
		}
		t = p->parking[i].time;
	}
	t = c->time - t;
	//一共停留的时间

	while (p->parking[p->top].num != c->num)//在本车前的车
	{
		mw.top++;
		printf("车牌号为%d的车进入让路区\n", p->parking[p->top].num);
		mw.makeway[mw.top].num = p->parking[p->top].num;
		mw.makeway[mw.top].status = p->parking[p->top].status;
		mw.makeway[mw.top].time = p->parking[p->top].time;
		p->top--;
	}//依次进入让路区
	p->top--;//本车出栈
	printf("车牌号为%d的车驶出\n", c->num);
	while (mw.top != -1)
	{
		p->top++;
		printf("车牌号为%d的车重新回到停车场\n", mw.makeway[mw.top].num);
		p->parking[p->top].num = mw.makeway[mw.top].num;
		p->parking[p->top].status = mw.makeway[mw.top].status;
		p->parking[p->top].time = mw.makeway[mw.top].time;
		mw.top--;
	}//重新回到停车区

	return t;
}

int main()
{
	char ch = 'A';
	int nu = 0;
	int ti = 0;

	//初始化
	Parking p;
	PreParking(&p);
	Waitlink wl;
	PreWait(&wl);
	Makeway mw;
	Premakeway(&mw);

	printf("请输入车辆状态,车辆序号,时间:\n");
	printf("A代表停车,D代表离开,E代表结束输入\n");
	while (ch != 'E')
	{
		scanf("%c %d %d", &ch, &nu, &ti);
		Car c = { ch,nu,ti };

		if (c.status == 'A')
		{
			//进入停车场
			if (!PFull(&p))
			{
				Intopark(&c, &p);//栈不满,进入停车场
				printf("车牌号为%d的车在%d时进入停车场\n", c.num, c.time);
			}
			else
			{
				//栈满,进入等待区
				Intowait(&c, &wl);
				printf("车牌号为%d的车在%d时进入等待区\n", c.num, c.time);
			}
		}
		else if (c.status == 'D')
		{
			//离开停车场
			//检查停车场是否有这辆车
			if (Ifthecar(&p, &c))//有这辆车,进行离开操作
			{
				int t = 0,t1=0;
				t1 = c.time;
				t = Outpark(&c, &p, mw);
				printf("车牌号为%d的汽车在%d时刻离开停车场,停留总时间为%d\n", c.num, c.time, t);
				//然后看等待区有没有车辆
				Waitintopark(&p, &wl,t1);
			}
			else
			{
				printf("停车场里并没有这辆车\n");
			}
			
		}
		/*else
		{
			printf("请输入正确的编号\n");
		}*/
	}
	return 0;
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
hI6KHgNRyc1X