C++、患者診察シミュレーションプログラム、データ構造プログラム


患者が病院に並んで、医者に診てもらう状況を反映するプログラムを作成します.患者の列の過程の中で、主に繰り返して、以下の2つの事:(1)患者は診療室に着いて、カルテを看護婦に渡して、待機列の中で待機します(2)看護婦は待機列の中から次の患者のカルテを取り出して、この患者は診療室に入って診察を受けます.患者の受診を待つ過程をシミュレートすることが要求される.プログラムはメニュー方式を採用し、オプションと機能の説明は以下の通りである:1、列に並ぶ-列に並ぶ患者のカルテ番号を入力し、患者の列に入る;2、受診-患者が列に並び、列の一番前の患者が受診し、列から削除する.3、列を表示する-最初から最後まですべての列に並んだ患者のカルテ番号をリストする.4、列に並ばず、残りの診察-列の最初から列の最後まですべての列に並んだ患者のカルテ番号をリストし、運行を終了する.
# include 
# include 
typedef struct qnode
{
   int data;//   
   struct qnode * next; //       
} QNode; //       
typedef struct
{
	QNode *front,*rear;//         
} QuType; //      

void Destroyqueue(QuType *&qu) //    
{
	QNode *pre,*p;
    pre=qu->front;
    if (pre!=NULL) //     
	{
        p=pre->next;
        while(p!=NULL)//           
		{
           free(pre);
		   pre=p;
		   p=p->next;
		}
        free(pre);
	}
    free(qu); //      
}

bool exist(QuType *qu,int no) //        no       
{
	bool find =false;
	QNode *p=qu->front;
    while(p!= NULL&&!find)
    {
    	if(p->data==no) find=true;
    	else p=p->next;
    }
    return find;
}

void SeeDoctor()//         
{
	int sel,no;
    bool flag=true;//      
    QuType *qu;//        
    QNode *p;//        
    qu=(QuType *)malloc(sizeof(QuType)); //    
    qu->front=qu->rear=NULL;
    while(flag) //    
    {
    	printf(" 1:   2:   3:     4:    ,       5:        :"); 
    	scanf("%d",&sel);//     
    	switch(sel)
    	{
	    	case 1://1printf("      :");
					while(true)
					{
						scanf("%d",&no);//      
						if(exist(qu,no))//   
						     printf("        ,    :");
                        else break;//   
					}
					p=(QNode *)malloc( sizeof(QNode));//    
					p->data=no;//      
					p->next=NULL;
				    if(qu->rear==NULL) //       
                        qu->front=qu->rear=p;
                    else
                    {
                    	qu->rear->next=p;
                        qu->rear=p; // p    
                    }
                    break;
            case 2:
                   if(qu->front==NULL)//  
                       printf("        !
"
); else // { p=qu->front; printf(" %d
"
,p->data); if (qu->rear==p) // qu->front=qu->rear=NULL; else qu->front=p->next; free(p); break; } case 3: if (qu->front==NULL) // printf(" !
"
);// else // { p=qu->front; printf(" :"); while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("
"
); } break; case 4: // if (qu->front==NULL) // printf(" !
"
); else // { p=qu->front; printf(" :"); while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("
"
); } Destroyqueue(qu);// flag=false; // break; case 5: // if (qu->front!=NULL) // printf(" !
"
); flag=false; // Destroyqueue(qu); // break; default:printf(" !
"
);break; } } } int main() { SeeDoctor(); return 1; }

総括:患者診察シミュレーションプログラムは主にキュー応用のアルゴリズム設計に対する熟知と掌握であり、プログラムの中で主に異なる選択を正確に識別し、異なる選択の下で行う操作を設計することにある.これらの異なる操作の中で、患者のカルテ番号が重複して入力されているかどうか、チェーンチームの要素が空であるかどうかなどの状況を考慮しなければならない.異なる場合に、異なる文を出力したり、異なる操作をしたりするために.また、患者が並んで診察を受けた後、対応する患者の結点空間を解放し、並ばないと退勤しないで最後にチェーンチームの記憶空間を解放しなければならない.