#include <stdio.h>
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 5;
#define STACKINCREMENT 2;
typedef int car1;
typedef int car2;
typedef struct
{
car *fcar;
car *lcar;
int stacksize;
}SqStac;//停车场
typedef struct QNode
{
car date;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
Queueptr rear;
}LinkQueue;
typedef struct
{
int id;
int time;
}car1,car2;
int main()
{
int choice1;
char choice2;
float time,money;
SqStack S1;
SqStack S2;
LinkQueue Q;
car1 car1_A,car1_B,car1_C;
InitStack(&S1);
InitStack(&S2);
InitQueue(&Q);
while(choice1==1)
{
printf("欢迎来到XX停车场!/n");
printf("请按键选择:(A 进入停车场 D 离开停车场 E 退出系统)/n");
scanf("选择:%c",&choice2);
printf("/n");
switch(choice2)
case'A':
printf("请输入您的车牌ID和进入停车场时间/n");
scanf("ID:%d/n",&car1_A.id);
scanf("time:%d",&car1_A.time);
if(StackEmpty1(S1))
{
Push1(*S1,car1_A);//?
printf ("你的车牌是:%d/n进入时间是%d/n",car1_A.id,car1_A.time);
printf("是否继续? 请选择:1 继续 0 退出/n");
scanf("%d",choice1);
}
else
{
printf("停车场已满,请停入临时车道/n");
EnQueue(*Q, car1_A);
printf("是否继续? 请选择:1 继续 0退出/n");
scanf("%d",choice1);
}
case'D':
printf ("输入你要开走的车的车牌ID和时间/n");
scanf("ID:%d/n",&car1_B.id);
scanf("时间:",&car1_B.time);
while(!StackEmpty1(S1))
{
pop1(*S1,car_C);
if(car1_B.id==car1_C.id)
{
printf("欢迎下次再来!/n");
printf("你的车牌是%d",car1_B.id);
printf("你停入时间是%d/n 你离开时间是%d/n",car1_A.time,car1_B.time);
time=car1_B.time-car1_A.time;
money=time*2;
printf("你总共用时间%f/n",time);
printf("你需缴纳的停车费为%f",money);
}
else
push2(*S2,car_C);
}
while(!StackEmpty2(S2))
{
pop2(*S2,car_C);
push(*S1,car_C);
}
while(!QueueEmpty(Q)&&!StackFull1(S1))
{
DeQueue(&Q,&car_C);
if(!StackFull1(S1))
{
Push1(&S1,car_C);
}
}
printf("是否继续?1 继续 0退出");
scanf("%d/n",chioce1);
break;
case'E':
break;
}
return 0;
}
int InitStack(SqStack *S1)
{
(*S1).fcar=(car1 *) malloc(STACK_INIT_SIZE * sizeof (car));
if (!(*S1).fcar) exit (OVERFLOW);
(*S1).lcar=(*S1).fcar;
(*S1).stacksize=STACK_INIT_SIZE;
return OK;
}//构建空栈为停车场
int StackEmpty1(SqStack S1)
{
if (S1.fcar==S1.lcar)
return OK;
}
int StackFull1(SqStack S1) /*查看停车厂是否已满*/
{
if(S1.lcar-S1.fcar>=STACK_INIT_SIZE) /*若栈顶与栈底之差大于等于栈的最大存储空间,则已满*/
return OK;
else
return ERROR;
}
int Push(SqStack *S1,car e)
{
if ((*S1).lcar -(*S1).fcar >=(*S1).stacksize )
{
(*S1).fcar =(car *)realloc((*S1).fcar,((*S1).stacksize +STACKINCREMENT)*sizeof (car));
if (!(*S1).fcar )exit (OVERFLOW);
(*S1).lcar =(*S1).fcar+(*S1).stacksize ;
(*S1).stacksize +=STACKINCREMENT;
}
*(*S1).lcar ++=e;
return OK;
}//停入停车场
int Pop(SqStack *S1,car *e)
{
if((*S1).lcar ==(*S1).fcar)
return ERROE;
else
e=*--(*S1).lcar;//先把S.lcar减减,再减的S.lcar指针赋值为E
return OK;
}//出主停车场
/*``````````````````````````停车场````````````````````````````*/
/*````````````````````````````````备用停车道````````````````````````*/
int InitQueue(LinkQueue *Q)
{
(*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
if(!(*Q).front)exit(OVERFLOW);
(*Q).front->next=NULL;
return OK;
}//构建一条临时车道
int EnQueue(LinkQueue *Q, car1 e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)exit(OVERFLOW);
p->date=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}//??
int DeQueue(LinkQueue *Q,car1 *e)
{
QueuePtr p;
if (Q->front==Q->rear)
return ERROR;
p=Q->front->next;
*e=p->date;
Q->front->next=p->next;//??
if (Q->rear==P)
Q->rear=Q->front;
free(p);
return OK;
}
int QueueEmpty(LinkQueue Q)
{
if (Q.front==Q.rear)
return OK;
else
return ERROR;
}
有个 “执行 cl.exe 时出错”
是不是逻辑有错误?
--------------------Configuration: 停车场 - Win32 Debug--------------------
C:/Documents and Settings/Administrator/桌面/学习资料/第三学期课程设计/完成作业/停车场/停车场.c(37) : error C2061: syntax error : identifier 'Queueptr'
C:/Documents and Settings/Administrator/桌面/学习资料/第三学期课程设计/完成作业/停车场/停车场.c(38) : error C2059: syntax
执行 cl.exe 时出错.
停车场.exe - 1 error(s), 0 warning(s)