#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#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 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 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->park服务器托管网ing[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时刻离开停车场,停留总时间为%dn", c.num, c.time, t);
//然后看等待区有没有车辆
Waitint服务器托管网opark(&p, &wl,t1);
}
else
{
printf("停车场里并没有这辆车n");
}
}
/*else
{
printf("请输入正确的编号n");
}*/
}
return 0;
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 【序列化与反序列化】关于序列化与反序列化MessagePack的实践
在进行序列化操作之前,我们还对系统进行压测,通过jvisualvm分析cpu,线程,垃圾回收情况等;运用火焰图async-profiler分析系统性能,找出程序中占用CPU资源时间最长的代码块。 代码放置GitHub:https://github.com/na…