因为你定义函数:bool EmptyStack(StackSq *S);及void Push(struct StackSq *S,ElemType x);时
参数为(StackSq *)类型,而chelai()函数中你传递参数时使用的是(&S),而S定义为(struct StackSq *)型,
所以,你传递的参数类型为(struct StackSq **)与你定义的EmptyStack()函数及Push()函数要求的类型
不相符合.所以,chelai()函数中你应该改为:
//有车到来
void chelai(struct StackSq* S,struct QueueLk* HQ)
{
// int a;
ElemType laiche={0};
// a=EmptyStack(*S);
printf("请输入车辆的车牌号(如 京XX8888),及此刻时间(如 HH:MM):\n");
// scanf("%s",&laiche.chepai);
// scanf("%s",&laiche.lai);
// scanf("%s",&laiche.qu);
// laiche.chepai=getch();
// laiche.lai=getch();
// laiche.qu='\0';
gets(laiche.chepai);
gets(laiche.lai);
if(EmptyStack(S)==0)
{
printf("停车场尚有车位,可以驶入!\n");
Push(S,laiche);
}
else
{
if(S->top==N-1)
{
printf("停车场车位已满,请驶入便道等候!\n");
EnQueue(HQ,laiche);
}
else
{
printf("停车场尚有车位,可以驶入!\n");
Push(S,laiche);
}
}
}
==============================================
补充:
根据部分代码段目前还看不出什么地方出了错,如果可以的话,你把整个程序的代码全部贴出来吧.
==============================================
补充:
修改结果如下:
#include
#include
#include
#include
#include
#include
#define N 2
//车辆信息
struct che
{
char chepai[20];//车牌(要求格式 京XX8888)
char lai[6];//车到达时间(要求格式 HH:MM)
char qu[6];//车离开时间(要求格式 HH:MM)
};
typedef struct che ElemType;
//定义栈数据结构表示停车场
struct StackSq
{
ElemType* stack;
int top;
int MaxSize;
};
//用sNode数据结构表示便道上停放的车
struct sNode
{
ElemType data;
struct sNode *next;
};
//定义队列数据结构表示便道(使用struct sNode数据结构)
struct QueueLk
{
struct sNode *front;
struct sNode *rear;
};
//typedef struct che ElemType;
//=======================栈相关函数
//初始化栈,即置栈为空
void InitStack(struct StackSq* S)
{
S->MaxSize=N;
S->stack=(ElemType *)malloc(N*sizeof(ElemType));
S->top=-1;
}
//新元素进栈
void Push(struct StackSq* S,ElemType x)
{
// if(S->top==N-1)
// againMalloc(S);
S->top++;
S->stack[S->top]=x;
}
//删除栈顶元素
ElemType Pop(struct StackSq* S)
{
if(S->top==-1)
{
printf("栈空,无元素出栈!\n");
getchar();
exit(1);
}
S->top--;
return S->stack[S->top+1];
}
//判断S是否为空
int EmptyStack(struct StackSq* S)
{
if(S->top==-1)
return 1;
else
return 0;
}
//====END
//===================队列相关函数
//初始化链队
void InitQueue(struct QueueLk* HQ)
{
HQ->front=HQ->rear=NULL;
}
//检查链队是否为空
int EmptyQueue(struct QueueLk* HQ)
{
if(HQ->front==NULL)
return 1;
else
return 0;
}
//向链队中插入一个元素
void EnQueue(struct QueueLk* HQ,ElemType x)
{
struct sNode *newp;
newp=(sNode *)malloc(sizeof(struct sNode));
if(newp==NULL)
{
printf("内存动态空间用完,退出运行!\n");
exit(1);
}
newp->data=x;
newp->next=NULL;
if(HQ->rear==NULL)
HQ->front=HQ->rear=newp;
else
HQ->rear=HQ->rear->next=newp;
}
//从队列中删除一个元素
ElemType OutQueue(struct QueueLk* HQ)
{
struct sNode *p;
ElemType temp;
if(HQ->front==NULL)
{
printf("队列为空无法删除!\n");
exit(1);
}
temp=HQ->front->data;
p=HQ->front;
HQ->front=p->next;
if(HQ->front==NULL)
HQ->rear=NULL;
free(p);
return temp;
}
//====END
//显示开始菜单
void myprintf0()
{
printf("\n\n\n\n\n");
printf(" ================================================\n");
printf(" 停车场管理系统\n");
printf(" ================================================\n");
printf(" 1----有车到来\n");
printf(" 2----有车要走\n");
printf(" 3----查看停车场\n");
printf(" 4----收费设置\n");
printf(" 5----关 于\n");
printf(" 0----退 出\n");
printf(" ================================================\n");
printf(" 请选择:");
}
//有车到来
void chelai(struct StackSq &S,struct QueueLk* HQ)
{
ElemType laiche={0};
printf("请输入车辆的车牌号(如 京XX8888),及此刻时间(如 HH:MM):\n");
fflush(stdin);
printf("牌号=");
gets(laiche.chepai);
fflush(stdin);
printf("时间=");
gets(laiche.lai);
if(EmptyStack(&S)==1)
{
printf("停车场尚有车位,可以驶入!\n");
Push(&S,laiche);
printf("车牌:%s, 入场时间:%s",S.stack[0].chepai,S.stack[0].lai);
printf(" 位置:S.top=%d",S.top);
}
else
{
if(S.top==N-1)
{
printf("停车场车位已满,请驶入便道等候!\n");
EnQueue(HQ,laiche);
}
else
{
printf("停车场尚有车位,可以驶入!\n");
Push(&S,laiche);
// printf("grgfgfdg%s,%s",S.stack[0].chepai,S.stack[0].lai);
}
}
}
//有车要走
void chezou(struct StackSq &S,struct QueueLk* HQ)
{
int a=EmptyStack(&S),i=0,j=0;
struct StackSq temp;
ElemType zouche,t;
InitStack(&temp);
printf("请输入车辆的车牌号(如 京XX8888),及此刻时间(如 HH:MM):\n");
fflush(stdin);
printf("牌号=");
gets(zouche.chepai);
fflush(stdin);
printf("时间=");
gets(zouche.qu);
bool hadFound = false;
for(i=0;i
while ( S.top > -1 )
{
t = Pop(&S);
if ( strcmp(t.chepai,zouche.chepai) == 0 )
{
hadFound = true;
if ( HQ->front != NULL )
{
t = OutQueue(HQ);
Push(&S,t);
}
break;
}
else
{
Push(&temp,t);
}
}
while ( temp.top > -1 )
{
t = Pop(&temp);
Push(&S,t);
}
break;
}
if ( ! hadFound )
{
printf("找不到该车!\n");
}
}
//查看停车场
void chakan(struct StackSq S,struct QueueLk* HQ)
{
int i=0,j=0;
printf("S.top=%d",S.top);
if(S.top!=-1)
{
for(i=0;i
printf("车辆%s %s %s\n",S.stack[i].chepai,S.stack[i].lai,S.stack[i].qu);
}
}
}
int main()
{
char choose;
struct StackSq S;//停车场
// struct StackSq *Temp;//临时栈
struct QueueLk HQ;//便道
InitStack(&S);
printf("S.top= %d",S.top);
InitQueue(&HQ);
do
{
// system("cls");
myprintf0();
fflush(stdin);//////////////////冲洗缓冲区
choose=getchar();
printf("\n");
switch(choose)
{
case '1':chelai(S,&HQ);break;
case '2':chezou(S,&HQ);break;
case '3':chakan(S,&HQ);break;
// case '4':shezhi();break;
// case '5':guanyu();break;
case '0':{system("cls");printf("\n\n\n\n\n\n\n =======================================================\n 感谢使用本系统,已正常退出,按任意键结束!\n =======================================================\n\n\n\n ");};exit(0);
default :{printf(" %c为非法选项,请重新输入!按任意键继续!\n ",choose);getchar();};
}
}while(choose!='0');
}