数据结构代码有bug,求解决
#include <stdio.h>#include <malloc.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define n 3
int vip1=0;
int y,z;
float sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
float i1=0,i2=0,i3=0,i4=0,i5=0;
float ave1=0,ave2=0,ave3=0,ave4=0,ave5=0;
struct List
{
int A[n+1]; //病人来办理业务的N个窗口
int len; //表示数组中的元素个数
}L;
struct Lnode
{ //链表结点类型
int data;
Lnode *next;
};
struct Linkqueue
{ //链式存储的等候队列的类型定义
Lnode *front;
Lnode *rear;
}Q;
void Initshuzu() //初始化线性的算法
{
for(int i=1;i<=n;i++)
L.A[i]=0; //元素值为0,表示编号为I的窗口当前状态为空
L.len=0;
}
void Initqueue() //初始化队列的算法
{
Q.front=Q.rear=(Lnode *)malloc(sizeof(Lnode));
Q.front->next=NULL;
}
void Enqueue(Linkqueue *Q,int elem) //进队算法,插入elem为q的队尾元素;
{
Lnode *s;
s=(Lnode *)malloc(sizeof(Lnode));
s->data=elem;
s->next=NULL;
Q->rear->next=s;
Q->rear=s;
}
int Dlqueue(Linkqueue *Q) //出队算法
{
Lnode *t;
int x;
if(Q->front==Q->rear)
{
printf("队列为空!\n");
exit(1);
}
else
{
t=Q->front->next;
if(t->next==NULL)
Q->front=Q->rear=NULL;
else
Q->front->next=t->next;
x=t->data;
free(t);
return x;
}
}
void printl() //输出数组算法
{
int i;
printf("正在办理业务的顾客编号为: 挂号窗口1 挂号窗口2 挂号窗口3\n");
printf(" ");
for( i=1;i<=L.len;i++)
{
if(L.A[i]==0)
continue;
printf("%d号客户 ",L.A[i]);
}
printf("\n");
}
void print2() //输出队列算法
{
int i=0;
printf("正在等候办理业务的顾客编号为:");
Lnode *s=Q.front->next;
while(s!=NULL)
{
printf("%d ",s->data);
s=s->next;
i++;
}
printf("\n您的前面一共有%d人在排队,请您稍候!",i);
printf("\n");
}
void daoda(int x) //解决病人事件算法
{
int i=L.len+1;
if (L.len<n) //
{ L.A[i]=x;
i++;
L.len++;
}
else
Enqueue(&Q,x);
}
void likai(int x) //解决病人事件算法
{
int i=0;
do
{
if(x>L.len)
{
printf("输入有误!\n请重新输入:");
scanf("%d",&x);
}
else
for(i=0;i<=L.len;i++)
{
if(i==x)
{
printf("尊敬的%d号顾客您好!\n",x);
L.A[i]=0;
L.len--;
if(Q.front!=Q.rear)
{
int y=Dlqueue(&Q);
L.A[i]=y;
L.len++;
}
}
}
}while(i==0);
}
void time() //时间函数
{
time_t timep;
time (&timep);
printf(" 现在时刻:%s",ctime(&timep));
}
void main() //主函数
{
system("color 3f"); //屏幕颜色设定
system("mode con: cols=90 lines=35");
time_t a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,end;
double b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,b10=0,allsum=0,average=0,xi=0;
double A[10]={0,0,0,0,0,0,0,0,0,0};
int c,x,v=0,w=0;
Initshuzu();
Initqueue();
double sum=0;
while(1)
{
printf("\n********************************医院挂号系统******************************************\n");
printf("\n \n");
printf(" 1 病人到达\n");
printf(" 2 病人离开\n");
printf(" 3 窗口情况查询\n");
printf(" 4 查看排队情况\n");
printf(" 5 退出\n\n");
time();
printf("\n 提示:请按回车键进行下一步操作\n");
printf("\n \n");
printf("*********************************瑞慈医院*******************************************\n");
printf("请输入:");
scanf("%d",&c);
switch(c)
{
case 1:
{
system("cls");
printf("\n*********************************病人到达界面*****************************************\n\n");
v++; //计数
printf("你的卡号为%d.\n",v);
daoda(v);
if(v==1)
{
a1=time(NULL); //v=1的客户到达时间
system("pause");
}
else if(v==2)
{
a2=time(NULL);
system("pause");
}
else if(v==3)
{
a3=time(NULL);
system("pause");
}
else if(v==4)
{
a4=time(NULL);
system("pause");
}
else if(v==5)
{
a5=time(NULL);
system("pause");
}
else if(v==6)
{
a6=time(NULL);
system("pause");
}
else if(v==7)
{
a7=time(NULL);
system("pause");
}
else if(v==8)
{
a8=time(NULL);
system("pause");
}
else if(v==9)
{
a9=time(NULL);
system("pause");
}
else if(v==10)
{
a10=time(NULL);
system("pause");
}
else
{
printf("请稍候拿号,谢谢!");
system("pause");
}
system("cls");
break;
}
case 2:
{
system("cls");
printf("\n************************************病人离开界面******************************************\n\n");
printf("请输入离开病人的编号:\n");
scanf("%d",&x);
likai(x);
w++;
if(x=1)
{
printf("挂号结束,祝您早日康复!");
}
else if(x=2)
{
printf("挂号结束,祝您早日康复!");
}
else if(x=3)
{
printf("挂号结束,祝您早日康复!");
}
else if(x=4)
{
printf("挂号结束,祝您早日康复!");
}
else if(x=5)
{
printf("挂号结束,祝您早日康复!");
}
else if(x=6)
{
printf("挂号结束,祝您早日康复!");
}
else if(x=7)
{
printf("挂号结束,祝您早日康复!");
}
else if(x=8)
{
printf("挂号结束,祝您早日康复!");
}
else if(x=9)
{
printf("挂号结束,祝您早日康复!");
}
else if(x=10)
{
printf("挂号结束,祝您早日康复!");
}
getch();
system("cls");
break;
}
case 3:
{
system("cls");
printf("\n***********************************窗口查询界面*******************************************\n\n");
printl();
getch();
system("cls");
break;
}
case 4:
{
system("cls");
printf("\n**********************************排队查询界面*******************************************\n\n");
print2();
getch();
system("cls");
break;
}
case 5:
return;
getch();
system("cls");
default: printf("输入有误!请重新输入:\n");
getch();
system("cls");
}
}
}
在这段代码中,当有四个病人进入,之后出去一个病人,再调用排队查询时会报错,为什么,求大神解决!!!