2 u013382529 u013382529 于 2014.01.05 02:06 提问

数据结构关于双向栈的问题

我自己做的小程序 是一个停车管理系统 我把相关的数据结构的定义和函数的定义发下 求大家帮忙看看,是不是我定义的有问题,运行出现问题,大概是在进栈出栈上出现的问题,谢谢大家啦~~

typedef struct ds_Car //地上停车场车辆
{
int number; //车号
int hour; //到达的小时
int minute; //到达的分钟
}ds_CarNode;
typedef struct //地上停车场(采用双向栈)
{
ds_CarNode base[2]; // 0和1分别表示低端和高端栈顶和栈底
ds_CarNode *top[2];
int stacksize;//当前的车数
}ds_Park;
Status InitDStack(ds_Park &p)//构造一个空的双向栈
{
p.base[0]=(ds_CarNode
)malloc(DSPARKSIZE*sizeof(ds_Car));//为双向栈分配内存
if(!p.base)
exit(OVERFLOW);
p.base[1]=p.base[0]+DSPARKSIZE;
p.top[0]=p.base[0];
p.top[1]=p.top[1];
p.stacksize=0; //当前停的车辆数
return OK;
}
Status DPush(ds_Park &p,ds_CarNode e,int choice)//进栈 choice为从左右哪边进栈
{
if(p.top[0]>p.top[1])
printf("地上停车场已满!\n");
if(choice==0)
{
p.stacksize++;
p.top[0]++=e;
}
if(choice==1)
{
p.stacksize++;
*p.top[1]--=e;
}
return OK;
}
Status DPop(ds_Park &p,ds_CarNode e,int choice)//出栈 choice为从左右哪边出栈
{
if((p.top[0]==p.base[0])&&(p.top[1]==p.base[1]))
printf("地上停车场为空!\n");
if(choice==0)
{
p.stacksize--;
e=
--p.top[0];
}
if(choice==1)
{
p.stacksize--;
e=*++p.top[1];
}
return OK;
}

//地上停车场的离开
Status DSLeave(ds_Park &p1,ds_Park &p2,wait_Line &q1,wait_Line &q2)
{
int number,hour,minute;
int leave_hour,leave_minute;
int choice;
int flag=1; //用来实现是否退出循环
double money=0;
printf("请输入车牌号:\n");
scanf("%d",&number);
printf("离开停车场的小时:\n");
scanf("%d",&leave_hour);
printf("离开停车场的分钟:\n");
scanf("%d",&leave_minute);
printf("从哪个出口离开?(0\1)\n");
scanf("%d",&choice);
ds_CarNode e,m;
CarPtr w;
while(flag)
{
DPop(p1,e,choice);
DPush(p2,e,choice);
if(e.number==number)
{
flag=0;
int a=leave_hour-e.hour;
int b=leave_minute-e.minute;
money=((a*60+b)/60)*PRICE;
hour=e.hour;
minute=e.minute;
}
}
DPop(p2,e,choice);
while(p2.stacksize)
{
DPop(p2,e,choice);
DPush(p1,e,choice);
}
if(p1.stacksize {
if(q1.length!=0)
{
DeQueue(q1,w);
m.hour=leave_hour;
m.minute=leave_minute;
m.number=w->number;
DPush(p1,m,choice);
printf("车牌号为%d的车已由等候队列进入停车场,停车位为%d\n",m.number,p1.stacksize);
}
if(q2.length!=0)
{
DeQueue(q2,w);
m.hour=leave_hour;
m.minute=leave_minute;
m.number=w->number;
DPush(p1,m,choice);
printf("车牌号为%d的车已由等候队列进入停车场,停车位为%d\n",m.number,p1.stacksize);
}
}
printf("停车费为%lf\n欢迎下次光临!",money);
return OK;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!