C++语言求解析。整体语言是用了一个队列解决的还是一个队列加一个链表、?? 20
#include<stdio.h>#include<malloc.h>typedefintqueuetype;queuetypenum=1;typedefstructqn...
#include <stdio.h>
#include <malloc.h>
typedef int queuetype;
queuetype num=1;
typedef struct qnode
{
queuetype data;
struct qnode *next;
} QNode; //链队结点类型
typedef struct
{
QNode *front,*rear; //定义首尾指针。
} QuType;
void InitQueue(QuType *L)//初始化
{
L->front=L->rear=NULL; //因为为空,指针域为NULL。
}
void PushQueue(QuType *L,queuetype e)//元素入队。
{
QNode *p=(QNode*)malloc(sizeof(QNode)); //申请空间。
p->data=e;
p->next=NULL;
if(!L->front)
{
L->front=p;
}
if(L->rear) L->rear->next=p; L->rear=p; num++;
}
void DeleteQueue(QuType *L) //出队操作。
{
if(L->front)
{
QNode *p;
p=L->front;
printf("第%d位选手已经就诊!\n",p->data);
L->front=p->next;
if(!p) L->rear=NULL;
else free(p);
}
else
{
num=0;
printf("所有的病人都已就诊完毕!\n");
}
}
void ShowQueuePerson(QuType *L) //输出排队人员的编号。
{
QNode *p=L->front;
printf("输出所有排队者的序号:\n");
while(p)
{
printf(" %d\n",p->data);
p=p->next;
}
if(!L->front) printf("病人都已经看病完成!\n");
}
void QuilkSee(QuType *L,queuetype e) //查看排队。
{
QNode *p=L->front,*q,*t;
while(p&&p->data!=e)
{
t=p;
p=p->next;
}
if(p->data==e)
{
printf("%d号可以进行治疗。\n",p->data);
q=t->next;
if(q->next) t->next=q->next;
if(t->next==L->rear) t->next=L->rear=NULL; free(q);
}
else printf("队列中没有这个人。\n");
}
//链队类型
void SeeDoctor()
{
int sel,flag=1;
QuType *qu=(QuType*)malloc(sizeof(QuType)); //申请空间。
queuetype quik=0;
InitQueue(qu); //创建空队
while (flag==1) //循环执行
{
printf("1:排队 2:就诊 3:查看排队 4.不再排队,余下依次就诊 请选择:");
scanf("%d",&sel);
switch(sel) //排队,入队操作。
{
case 1: PushQueue(qu,num); printf("\n挂号成功!\n"); break; //入队成功,
case 2: DeleteQueue(qu);
printf("\n");break; //就诊完毕,出队操作。
case 3: ShowQueuePerson(qu); break; //显示排队的病人。
case 4: {
printf("如果您想马上就诊,请输入您的排队号码:");
scanf("%d",&quik);
QuilkSee(qu,quik); //查看此号码在队列中的情况。
printf("\n");
} break; //任意顺序就诊
default : printf("输入错误,请从新输入!\n\n"); continue;
}
}
}
void main()
{
SeeDoctor();
} 展开
#include <malloc.h>
typedef int queuetype;
queuetype num=1;
typedef struct qnode
{
queuetype data;
struct qnode *next;
} QNode; //链队结点类型
typedef struct
{
QNode *front,*rear; //定义首尾指针。
} QuType;
void InitQueue(QuType *L)//初始化
{
L->front=L->rear=NULL; //因为为空,指针域为NULL。
}
void PushQueue(QuType *L,queuetype e)//元素入队。
{
QNode *p=(QNode*)malloc(sizeof(QNode)); //申请空间。
p->data=e;
p->next=NULL;
if(!L->front)
{
L->front=p;
}
if(L->rear) L->rear->next=p; L->rear=p; num++;
}
void DeleteQueue(QuType *L) //出队操作。
{
if(L->front)
{
QNode *p;
p=L->front;
printf("第%d位选手已经就诊!\n",p->data);
L->front=p->next;
if(!p) L->rear=NULL;
else free(p);
}
else
{
num=0;
printf("所有的病人都已就诊完毕!\n");
}
}
void ShowQueuePerson(QuType *L) //输出排队人员的编号。
{
QNode *p=L->front;
printf("输出所有排队者的序号:\n");
while(p)
{
printf(" %d\n",p->data);
p=p->next;
}
if(!L->front) printf("病人都已经看病完成!\n");
}
void QuilkSee(QuType *L,queuetype e) //查看排队。
{
QNode *p=L->front,*q,*t;
while(p&&p->data!=e)
{
t=p;
p=p->next;
}
if(p->data==e)
{
printf("%d号可以进行治疗。\n",p->data);
q=t->next;
if(q->next) t->next=q->next;
if(t->next==L->rear) t->next=L->rear=NULL; free(q);
}
else printf("队列中没有这个人。\n");
}
//链队类型
void SeeDoctor()
{
int sel,flag=1;
QuType *qu=(QuType*)malloc(sizeof(QuType)); //申请空间。
queuetype quik=0;
InitQueue(qu); //创建空队
while (flag==1) //循环执行
{
printf("1:排队 2:就诊 3:查看排队 4.不再排队,余下依次就诊 请选择:");
scanf("%d",&sel);
switch(sel) //排队,入队操作。
{
case 1: PushQueue(qu,num); printf("\n挂号成功!\n"); break; //入队成功,
case 2: DeleteQueue(qu);
printf("\n");break; //就诊完毕,出队操作。
case 3: ShowQueuePerson(qu); break; //显示排队的病人。
case 4: {
printf("如果您想马上就诊,请输入您的排队号码:");
scanf("%d",&quik);
QuilkSee(qu,quik); //查看此号码在队列中的情况。
printf("\n");
} break; //任意顺序就诊
default : printf("输入错误,请从新输入!\n\n"); continue;
}
}
}
void main()
{
SeeDoctor();
} 展开
2个回答
展开全部
如楼上,队列是一种数据组织结构,你可以完全自己再写的,上面就是用链表动态模拟的队列的过程。
先进先出,从而实现既能实现病人随时增减性,并且先排号先看病的形式。
先进先出,从而实现既能实现病人随时增减性,并且先排号先看病的形式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询