#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<stdio.h>
const int maxsize = 2;
using namespace std;
int size123=0;
typedef struct car
{
int carnum;
int intime;
}car;
typedef struct carout
{
int carnum;
int intime;
struct carout* next;
}carout;
typedef struct
{
struct car space[maxsize];
int stacktop;
}stack;
typedef struct
{
carout* front;
carout* rear;
}queue;
stack carinspace;//停车场中的汽车空间
queue carinqueue;
int pcar = 0;//停车场中汽车数量
int pcarout = 0;//停车场外的数量
void car_in(int carnum, int cartime)
{
if (carinspace.stacktop <maxsize)
{
carinspace.space[carinspace.stacktop].carnum = carnum;
carinspace.space[carinspace.stacktop].intime = cartime;
pcar++;
printf("%d 号车进入停车场!时间为:%d\n", carinspace.space[carinspace.stacktop].carnum, carinspace.space[carinspace.stacktop].intime);
carinspace.stacktop++;
}
else
{
carinqueue.front->carnum = carnum;
carinqueue.front->intime = cartime;
pcarout++;
printf("%d 号车进入候车场!到达时刻:%d\n", carinqueue.front->carnum, carinqueue.front->intime);
carinqueue.front->next = (carout*)malloc(sizeof(carout));
carinqueue.front = carinqueue.front->next;
}
}
void car_leave(int carnum, int cartime)
{
stack carin2;
int findcar=-1;
carout* p, *f;
carin2.stacktop = 0;
cout << carinspace.stacktop << endl;
cout << carinspace.space[0].carnum << endl;
for (int i = 0; i <carinspace.stacktop; i++)
{
cout << "执行" << endl;
if (carnum == carinspace.space[i].carnum)
{
findcar = i;
break;
}
}
if (findcar != -1)
{
for (;--carinspace.stacktop> findcar; carin2.stacktop++)
{
carin2.space[carin2.stacktop].carnum = carinspace.space[carinspace.stacktop].carnum;
carin2.space[carin2.stacktop].intime = carinspace.space[carinspace.stacktop].intime;
cout << carin2.space[carin2.stacktop].carnum << endl;
}
printf("%d 号车离开停车场!离开时刻:%d停留时长:%d\n", carinspace.space[carinspace.stacktop].carnum, cartime, cartime - carinspace.space[carinspace.stacktop].intime);
pcar--;
printf("应收停车费 %d\n", (cartime - carinspace.space[carinspace.stacktop].intime) * 5);
for (int i = carin2.stacktop - 1; i >= 0; i--)
{
cout << "执行" << endl;
carinspace.space[carinspace.stacktop].carnum = carin2.space[i].carnum;
carinspace.space[carinspace.stacktop].intime = carin2.space[i].intime;
carinspace.stacktop++;
carin2.stacktop --;
}
if (carinqueue.front != carinqueue.rear)
{
cout << "执行" << endl;
carinspace.space[carinspace.stacktop].carnum = carinqueue.rear->carnum;
carinspace.space[carinspace.stacktop].intime = cartime;
carinspace.stacktop++;
pcar++;
pcarout--;
p = carinqueue.rear;
carinqueue.rear = carinqueue.rear->next;
free(p);
}
}
/*else
{
p = carinqueue.front;
if (p != carinqueue.front && p->carnum != carnum)
{
f = p->next;
while (f != carinqueue.front && f->carnum != carnum)
{
p = f;
f = f->next;
}
if (f->carnum == carnum)
{
findcar = 1;
p->next = f->next;
printf("%d 号车离开候车场!离开时间:%d,停留时长%d\n", f->carnum, cartime, cartime - f->intime);
pcarout--;
cout << "应付停车费:" << 0 <<"元"<< endl;
free(f);
}
}
if (p->carnum == carnum)
{
findcar = 1;
carinqueue.rear = carinqueue.rear->next;
printf("%d 号车离开候车场!离开时间:%d停留时长%d\n", p->carnum, cartime, cartime - p->intime);
pcarout--;
printf("应付停车费:%d\n", (cartime - p->intime) * 0);
free(p);
}
}
if (findcar == -1)
printf("%d 号车不在停车场中\n", carnum);*/
}
int Result(char carmove, int carnum, int cartime)
{
switch (carmove)
{
case 'A':car_in(carnum, cartime); break;
case 'D':car_leave(carnum, cartime); break;
default:printf("输入错误!\n"); break;
}
return 1;
}
int main()
{
printf("欢迎来到石家庄铁道大学信1901-5张润轩的停车场\n");
printf("请输入信息\n");
printf("停车场大小预设为2");
int carnum, cartime;
char carmove;
carinspace.stacktop = 0;
carinqueue.front=carinqueue.rear=(carout*)malloc(sizeof(carout));
while (1)
{
printf("\n车辆到达请输入A;\n车辆离开请输入D;\n显示停车场内车数请输入P;\n退出程序请输入E:\n");
printf("\n请输入信息:\n");
cin >> carmove;
switch (carmove)
{
case 'A':
{
cin >> carnum;
cin >> cartime;
Result(carmove,carnum,cartime);
break;
}
case 'D':
{
cin >> carnum >> cartime;
Result(carmove, carnum, cartime);
break;
}
case 'E':
{
return 0;
}
}
}
}
数据结构实验2 栈和队列
最新推荐文章于 2022-11-23 15:36:19 发布