typedef struct{
QueuePtr front,rear;
int j;
}LinkQueue;//定义队列(车场外的便道)
void InitStack(SqStack s,int n)
{
//构造一个空栈(车站)
s->base=(car_infor)malloc(n*sizeof(car_infor));
if(!s->base) exit (0);//存储分配失败
s->top=s->base;
s->stacksize=n;
s->i=0;
}//InitStack
void Push(SqStack *s,int num,int time)
{
//元素进栈
if((s->top-s->base)>(s->stacksize))//栈满
return;
s->top->car_number=num;
s->top->car_time=time;
s->top++;
s->i++;
}//Push
void Pop(SqStack *s,int *num,int *time)
{
//元素出栈
if(s->top==s->base)
return ;
*num=(s->top-1)->car_number;
*time=(s->top-1)->car_time;
s->top–;
s->i–;
}
void InitQueue(LinkQueue *Q)
{
//初始化队列
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QueuePtr));
if(!Q->front) exit(0);
Q->front->next=NULL;
Q->j=0;
}
void EnQueue(LinkQueue *Q,int num)
{
//元素出列
QNode *p;
p=(QueuePtr)malloc(sizeof(QueuePtr));
if(!p) exit(0); //存储空间分配失败
p->car_number=num;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
Q->j++;
}
void DeQueue(LinkQueue Q,int num)
{
//若队列不为空,删除之后为空列表
QNode *p;
if(Q->frontQ->rear) return ;
p=Q->front->next;
*num=p->car_number;
Q->front->next=p->next;
if(Q->rearp)
Q->rear=Q->front;//删除之后为空列表的情况
Q->j--;
}
int isExistS(SqStack* s,int num)
{ //判断车辆是否到达车库
car_infor *p;
p=s->base ;
while(ptop )
{
if(p->car_number==num)
return 1;
else
p++;
}
return 0;
}
int isExistQ(LinkQueueQ,int num)
{// 判断车辆是否到达便道
QNode p;
if(Q->j ==0)
return 0;
p=Q->front->next;
while(p!=NULL)
{
if(p->car_number ==num)
return 1;
else
p=p->next;
}
return 0;
}
main()
{
int price,num,time,n,e1,e2;
int exit_stack,exit_queue;
char infor;
car_infor *p,*s;
SqStack stack1,stack2;//stack1为停车场,stack2为零时停靠站
LinkQueue Q;//Q为便道
printf("请输入停车场能够停的最多的车辆数目:\n");
scanf("%d",&n);
InitStack(&stack1,n);
InitStack(&stack2, n);
printf("请输入单位时间的停车价格:\n");
scanf("%d",&price);
InitQueue(&Q);
printf("请输入到达或者离去的信息(A:到达,D:离去,E:结束),车牌号,时刻:\n");
scanf("%c%d%d",&infor,&num,&time);
while(infor!='E')
{
switch(infor)
{
case 'A':
exit_stack=isExistS(&stack1,num);
exit_queue=isExistQ(&Q,num);//判断车牌号为num的是否在停车场内或者便道内
if(!exit_stack&&!exit_queue)
{
if(stack1.top-stack1.basecar_number!=num;p--)
{
}//查找要离开的车辆是不是在停车场内
if(p==stack1.base-1)
printf("停车场内没有车牌为%d的车\n",num);
else
{
for(s=stack1.top-1;s!=p;s--)//在它之后的汽车为要离开的汽车让路
{
Pop(&stack1,&e1,&e2);
Push(&stack2,e1,e2);
}
Pop(&stack1,&e1,&e2);//汽车离开
if(time
printf(“结束\n”);