C语言数据结构解决看医生排队问题

zhenhua0831 2010-04-20 08:15:03


#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
int data[MaxSize];
int front,rear; //队首和队尾指针
} SqQueue;
void InitQueue(SqQueue *&q) // 初始化对列
{
q=(SqQueue *)malloc (sizeof(SqQueue));
q->front=q->rear=0;
}
void ClearQueue(SqQueue *&q) //销毁队列
{
free(q);
}
int QueueEmpty(SqQueue *q) // 判断队列是否为空
{
return(q->front==q->rear);
}
int enQueue(SqQueue *&q,ElemType e) //入队列
{
if ((q->rear+1)%MaxSize==q->front) //队满
return 0;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e;
return 1;
}
int deQueue(SqQueue *&q,ElemType &e) // 出队列
{
if (q->front==q->rear) //队空
return 0;
q->front=(q->front+1)%MaxSize;
e=q->data[q->front];
return 1;
}
int dis_play(SqQueue *&q)
{
if(q->front=q->rear)
printf("队列为空,无法输出!");
while((q->rear+1)%MaxSize!=q->front)
{
printf("%d",q->data[q->front]);
q->front=(q->front+1)%MaxSize;
}
return 1;

}

void Seedoctor()
{
int i,j,no,e;
SqQueue *p;
for(j=0;j<100;j++)
{
printf("请选择:1:排队;2:就诊;3:查看排队;4:不在排队,余下依次就诊;5:下班;\n");
printf("请选择1……5之间任意一个输入:\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
printf(" >>输入病历号:");
scanf("%d",&no);
InitQueue(p); //创建空对
if(enQueue(p,no))
{
enQueue(p,no);
printf("您好,您应经加入队列中,请耐心等待您的就诊。\n");

}
else
printf("你好,该队已排满,请选择别的医生就诊!");

}
break;
case 2:
{
deQueue(p,e);
printf("请%d号进医生办公室就诊。\n",e);
}
break;
case 3:
{ printf("不再排队,余下的依次就诊.\n");
dis_play(p);
}
break;
case 4:
{
printf("排队顺序为:\n");
dis_play(p);
}
break;
case 5:
{
printf("你好,医生已经下班,请下次再来!\n");
ClearQueue(p);
}
break;
}
}
}
void main()
{
Seedoctor();
}
各位帮小弟看看,我这排队好像没有用上!!!
...全文
677 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhonglg3 2010-04-25
  • 打赏
  • 举报
回复
for(j=0;j<100;j++)
{
printf("请选择:1:排队;2:就诊;3:查看排队;4:不在排队,余下依次就诊;5:下班;\n");
printf("请选择1……5之间任意一个输入:\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
printf(" >>输入病历号:");
scanf("%d",&no);
if(enQueue(p,no))
{
enQueue(p,no);
printf("您好,您应经加入队列中,请耐心等待您的就诊。\n");

这段代码中if(enQueue(p,no)){enQueue(p,no)};printf("您好,你已经加入队列中,请耐心等待您的就诊 。\n");连续2此enQueue(p,no),而且每次第二次enQueue(p,no)都没有判别是否堆栈溢出所以导致程序出现未知错误,建议你修改下上面的语句在编译调试下。
zhenhua0831 2010-04-25
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
int data[MaxSize];
int front,rear; //队首和队尾指针
} SqQueue;
void InitQueue(SqQueue *&q) // 初始化对列
{
q=(SqQueue *)malloc (sizeof(SqQueue));
q->front=q->rear=0;
}
void ClearQueue(SqQueue *&q) //销毁队列
{
free(q);
}
int QueueEmpty(SqQueue *q) // 判断队列是否为空
{
return(q->front==q->rear);
}
int enQueue(SqQueue *&q,ElemType e) //入队列
{
if ((q->rear+1)%MaxSize==q->front) //队满
return 0;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e;
return 1;
}
int deQueue(SqQueue *&q,ElemType &e) // 出队列
{
if (q->front==q->rear) //队空
return 0;
q->front=(q->front+1)%MaxSize;
e=q->data[q->front];
return 1;
}
int dis_play(SqQueue *&q)
{
if(q->front==q->rear)
printf("队列为空,无法输出!");
while((q->rear+1)%MaxSize!=q->front)
{
printf("%d",q->data[q->front]);
q->front=(q->front+1)%MaxSize;
}
return 1;

}

void Seedoctor()
{
int i,no,e,flag=1;
SqQueue *p;
InitQueue(p); //创建空对
while(flag==1)
{
printf("请选择:1:排队;2:就诊;3:查看排队;4:不在排队,余下依次就诊;5:下班;\n");
printf("请选择1……5之间任意一个输入:\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
printf(" >>输入病历号:");
scanf("%d",&no);
if(enQueue(p,no))
{

printf("您好,您应经加入队列中,请耐心等待您的就诊。\n");

}
else
printf("你好,该队已排满,请选择别的医生就诊!");

}
break;
case 2:
{
deQueue(p,e);
printf("请%d号进医生办公室就诊。\n",e);
}
break;
case 3:
{ printf("不再排队,余下的依次就诊.\n");
dis_play(p);
}
break;
case 4:
{
printf("排队顺序为:\n");
dis_play(p);
flag=0;
}
break;
case 5:
{
printf("你好,医生已经下班,请下次再来!\n");
ClearQueue(p);
}
break;
}
}
}
void main()
{
Seedoctor();
}

修改了,一下,可是case3和case4还是有冲突啊。
bobo364 2010-04-21
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
int data[MaxSize];
int front,rear; //队首和队尾指针
} SqQueue;
void InitQueue(SqQueue *q) // 初始化对列
{
q=(SqQueue *)malloc(sizeof(SqQueue));
q->front=q->rear=0;
}
void ClearQueue(SqQueue *q) //销毁队列
{
free(q);
}
int QueueEmpty(SqQueue *q) // 判断队列是否为空
{
return(q->front==q->rear);
}
int enQueue(SqQueue *q,ElemType e) //入队列
{
if ((q->rear+1)%MaxSize==q->front) //队满
return 0;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e;
return 1;
}
int deQueue(SqQueue *q,ElemType e) // 出队列
{
if (q->front==q->rear) //队空
return 0;
q->front=(q->front+1)%MaxSize;
e=q->data[q->front];
return 1;
}
int dis_play(SqQueue *q)
{
if(q->front==q->rear)
printf("队列为空,无法输出!");
while((q->rear+1)%MaxSize!=q->front)
{
printf("%d",q->data[q->front]);
q->front=(q->front+1)%MaxSize;
}
return 1;

}

void Seedoctor()
{
int i,j,no,e;
SqQueue *p;
InitQueue(p); //创建空对
for(j=0;j<100;j++)
{
printf("请选择:1:排队;2:就诊;3:查看排队;4:不在排队,余下依次就诊;5:下班;\n");
printf("请选择1……5之间任意一个输入:\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
printf(" >>输入病历号:");
scanf("%d",&no);
if(enQueue(p,no))
{
enQueue(p,no);
printf("您好,您应经加入队列中,请耐心等待您的就诊。\n");

}
else
printf("你好,该队已排满,请选择别的医生就诊!");

}
break;
case 2:
{
deQueue(p,e);
printf("请%d号进医生办公室就诊。\n",e);
}
break;
case 3:
{ printf("不再排队,余下的依次就诊.\n");
dis_play(p);
}
break;
case 4:
{
printf("排队顺序为:\n");
dis_play(p);
}
break;
case 5:
{
printf("你好,医生已经下班,请下次再来!\n");
ClearQueue(p);
}
break;
}
}
}

int main()
{
Seedoctor();
system("pause");
return 0;
}



改了下,但还是没法运行,内存有越界,期待高人在改
bobo364 2010-04-21
  • 打赏
  • 举报
回复
int dis_play(SqQueue *&q)
{
if(q->front=q->rear) //初步看了一下,这里应该是q->front == q->rear
printf("队列为空,无法输出!");


if里有赋值语句,多半是不对的
kevinyujm 2010-04-21
  • 打赏
  • 举报
回复
要逐步学会程序调试技术。
xinzaiyiqi 2010-04-20
  • 打赏
  • 举报
回复
支持1楼的
sk19891117 2010-04-20
  • 打赏
  • 举报
回复
这个、、、、 这么长~ 建议你还是自己 跟踪看看吧
ericming200409 2010-04-20
  • 打赏
  • 举报
回复

int dis_play(SqQueue *&q)
{
if(q->front=q->rear) //初步看了一下,这里应该是q->front == q->rear
printf("队列为空,无法输出!");
zhenhua0831 2010-04-20
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
int data[MaxSize];
int front,rear; //队首和队尾指针
} SqQueue;
void InitQueue(SqQueue *&q) // 初始化对列
{
q=(SqQueue *)malloc (sizeof(SqQueue));
q->front=q->rear=0;
}
void ClearQueue(SqQueue *&q) //销毁队列
{
free(q);
}
int QueueEmpty(SqQueue *q) // 判断队列是否为空
{
return(q->front==q->rear);
}
int enQueue(SqQueue *&q,ElemType e) //入队列
{
if ((q->rear+1)%MaxSize==q->front) //队满
return 0;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e;
return 1;
}
int deQueue(SqQueue *&q,ElemType &e) // 出队列
{
if (q->front==q->rear) //队空
return 0;
q->front=(q->front+1)%MaxSize;
e=q->data[q->front];
return 1;
}
int dis_play(SqQueue *&q)
{
if(q->front==q->rear)
printf("队列为空,无法输出!");
while((q->rear+1)%MaxSize!=q->front)
{
printf("%d",q->data[q->front]);
q->front=(q->front+1)%MaxSize;
}
return 1;

}

void Seedoctor()
{
int i,j,no,e;
SqQueue *p;
InitQueue(p); //创建空对
for(j=0;j<100;j++)
{
printf("请选择:1:排队;2:就诊;3:查看排队;4:不在排队,余下依次就诊;5:下班;\n");
printf("请选择1……5之间任意一个输入:\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
printf(" >>输入病历号:");
scanf("%d",&no);
if(enQueue(p,no))
{
enQueue(p,no);
printf("您好,您应经加入队列中,请耐心等待您的就诊。\n");

}
else
printf("你好,该队已排满,请选择别的医生就诊!");

}
break;
case 2:
{
deQueue(p,e);
printf("请%d号进医生办公室就诊。\n",e);
}
break;
case 3:
{ printf("不再排队,余下的依次就诊.\n");
dis_play(p);
}
break;
case 4:
{
printf("排队顺序为:\n");
dis_play(p);
}
break;
case 5:
{
printf("你好,医生已经下班,请下次再来!\n");
ClearQueue(p);
}
break;
}
}
}
void main()
{
Seedoctor();
}

程序选项功能及说明:
(1)排队--输入排对病人的病历号,加入到队列中;
(2)就诊——病人排队队列中最前面的病人就诊,并将其队列号在队列中删除
(3)查看队列--从队尾到队首列出所有病人的病历号
(4)不在排队,余下以此就诊--从队尾到队首列出所有病人的病历号,并退出运行
(5)下班--退出运行。


问题在于我输入1<CR> 5 <CR>1 <CR>6<CR>3<CR>得到结果有错误,还有就是如果再输入4<CR>就得不到结果
zhenhua0831 2010-04-20
  • 打赏
  • 举报
回复
哦,这不是主要问题啊,主要问题是排队的,没有用上啊。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧