Advertisement

用链队实现病人到医院看病的过程

阅读量:

目录

1、创建LQueue.cpp文件

2.创建experiment.cpp文件

3.运行效果

1、创建LQueue.cpp文件

复制代码
 #include <stdio.h>

    
 #include <malloc.h>
    
 #include <string.h>
    
 //定义链队的数据结点
    
 typedef struct Lnode
    
 { 
    
 //存放患者姓名 
    
 	char data[10];
    
 //指针域 
    
 	struct Lnode * next;
    
 //病人链队结点 
    
 }QType;
    
 //定义病人链队结点 
    
 typedef struct
    
 {
    
 //指向队头病人结点 
    
 	QType * front;
    
 //指向队尾病人结点 
    
 	QType * rear;
    
 //链队中结点类型 
    
 }LQueue;
    
 //初始化队列
    
 void InitQueue(LQueue * &lq)
    
 {
    
 	lq=(LQueue *)malloc(sizeof(LQueue));
    
 //初始时队头和队尾指针都为空 
    
 	lq->rear=lq->front=NULL;
    
 } 
    
 //销毁链队
    
 void DestroyQueue(LQueue * &lq)
    
 {
    
 	QType * pre=lq->front,* p;
    
 //非空队的情况 
    
 	if(pre!=NULL)
    
 	{
    
 //只有一个 数据结点的情况 
    
 		if(pre==lq->rear)
    
 //释放pre结点 
    
 		   free(pre);
    
 //有两个或者多个 数据结点的情况 
    
     else
    
     {
    
     	p=pre->next;
    
     	while(p!=NULL)
    
     	{
    
 //释放pre结点 
    
 	        	free(pre);
    
 //pre、p同步后移 
    
 	        	pre=p;
    
 	        	p=p->next;
    
 	        }
    
     }
    
 //释放尾结点 
    
     free(pre);
    
 	}
    
 //释放链队结点 
    
 	free(lq);
    
 } 
    
 //进队
    
 void EnQueue(LQueue * &lq,char x[])
    
 {
    
 	QType * s;
    
 //创建新结点,插入到链队的尾 
    
 	s=(QType *)malloc(sizeof(QType));
    
 	strcpy(s->data,x);
    
 	s->next=NULL;
    
 //原队为空 队的情况 
    
 	if(lq->front==NULL)
    
 //front和rear都指向s结点 
    
 	  lq->rear=lq->front=s;
    
 //原队不为空的情况 
    
      else
    
      {
    
 //将结点s链到队尾 
    
    lq->rear->next=s;
    
 //rear指向结点s 
    
 	   lq->rear=s;	
    
      }
    
 } 
    
 //出队
    
 int DeQueue(LQueue * &lq,char x[])
    
 {
    
 	QType * p;
    
 //原队为空 队的情况 
    
 	if(lq->front==NULL)
    
 	  return 0;
    
 //p指向队头结点 
    
      p=lq->front;
    
 //取队头元素值 
    
      strcpy(x,p->data);
    
 //若原队列中只有一个结点,删除后队列变空 
    
      if(lq->rear==lq->front)
    
      lq->rear=lq->front=NULL;
    
 //有两个或者多个 数据结点的情况 
    
      else
    
     lq->front=lq->front->next;
    
      free(p);
    
      return 1;
    
 } 
    
 //判断队空
    
 int QueueEmpty(LQueue * lq)
    
 {
    
 	if(lq->front==NULL)
    
 //队空返回1 
    
 	   return 1;
    
      else
    
 //队不空返回0 
    
    return 0;
    
 }
    
 //输出队中所有元素
    
 int DispQueue(LQueue * lq)
    
 {
    
 	
    
 	QType * p;
    
 	if(QueueEmpty(lq))
    
 //队空返回0 
    
 	   return 0;
    
     else
    
     {
    
     	p=lq->front;
    
     	while(p!=NULL)
    
     	{
    
 	    	printf("%s ",p->data);
    
 	    	p=p->next;
    
 	    }
    
 	    printf("\n");
    
 //队不空返回1 
    
 	    return 1;
    
     }
    
 } 
    
    
    
    
    代码解读

2.创建experiment.cpp文件

复制代码
 #include "LQueue.cpp"

    
 int main()
    
 {
    
 	int sel,flag=1;
    
 	char name[10];
    
 	//定义一个病人队列 
    
 	LQueue * lq;
    
 	//初始化病人队列 
    
 	InitQueue(lq);
    
 //没有下班时循环执行 
    
 	while(flag==1)
    
 	{
    
 		printf("1:排队 2:看医生 3:查看排队 0:下班  请选择:");
    
 		//选择一个操作
    
 		scanf("%d",&sel);
    
 		switch(sel)
    
 		{
    
         //医生下班 
    
 			case 0:
    
 			      if(!QueueEmpty(lq))
    
 			         printf(">>请排队的患者明天就医\n");
    
               DestroyQueue(lq);
    
               flag=0;
    
               break;
    
         case 1:
    
 			       printf(">>请输入患者姓名:");
    
 			       scanf("%s",name);
    
 			       EnQueue(lq,name);
    
 			       break;
    
 		     case 2:
    
 		           if(!DeQueue(lq,name))
    
 			           printf(">>没有排队的患者\n");
    
 	               else
    
 	                   printf(">>患者%s看医生\n",name);
    
 			       break;
    
         //查看病人排队情况 
    
 			 case 3:
    
 			       printf(">>排队患者:");
    
 			      if(!DispQueue(lq))
    
 			          printf(">>没有排队的患者 \n");
    
 			       break;
    
 		} 
    
 	} 
    
 }
    
    
    
    
    代码解读

3.运行效果

全部评论 (0)

还没有任何评论哟~