数据结构实验-病人看病模拟程序
病人到達(dá)診室,將病歷本交給護(hù)士,排到等待隊(duì)列中候診。 護(hù)士從等待隊(duì)列中取出下一位病人的病歷,該病人進(jìn)入診室就診。
排隊(duì)——輸入排隊(duì)病人的病歷號(hào),加入到病人排隊(duì)隊(duì)列中。 就診——病人排隊(duì)隊(duì)列中最前面的病人就診,并將其從隊(duì)列中刪除。 查看排隊(duì)——從隊(duì)首到隊(duì)尾列出所有的排隊(duì)病人的病歷號(hào)。?退出排隊(duì)——結(jié)束排隊(duì)。下班——退出運(yùn)行。
代碼:
#include <stdio.h>
#include <malloc.h>
typedef struct qnode
{
? ? int data;
? ? struct qnode *next;
} QNode; ? ? ? ? ? ?/*鏈隊(duì)結(jié)點(diǎn)類型*/
?
typedef struct
{
? ? QNode *front,*rear;
} QuType; ? ? ? ? ? /*鏈隊(duì)類型*/
?
void SeeDoctor()
{
? ? int sel,flag=1,find,no;
? ? QuType *qu;
? ? QNode *p,*q;
? ? qu=(QuType *)malloc(sizeof(QuType)); ? ?/*創(chuàng)建空隊(duì)*/
? ? qu->front=qu->rear=NULL;
? ? while (flag==1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*循環(huán)執(zhí)行*/
? ? {
? ? ? ? printf("1:排隊(duì) 2:就診 3:查看排隊(duì) 4.不再排隊(duì),余下依次就診 5:下班 ?請(qǐng)選擇:");
? ? ? ? scanf("%d",&sel);
? ? ? ? switch(sel)
? ? ? ? {
? ? ? ? case 1:
? ? ? ? ? ? printf(" ?>>輸入病歷號(hào):");
? ? ? ? ? ? do
? ? ? ? ? ? {
? ? ? ? ? ? ? ? scanf("%d",&no);
? ? ? ? ? ? ? ? find=0;
? ? ? ? ? ? ? ? p=qu->front;
? ? ? ? ? ? ? ? while (p!=NULL && !find)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (p->data==no)
? ? ? ? ? ? ? ? ? ? ? ? find=1;
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? p=p->next;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (find)
? ? ? ? ? ? ? ? ? ? printf(" ?>>輸入的病歷號(hào)重復(fù),重新輸入:");
? ? ? ? ? ? }
? ? ? ? ? ? while (find==1);
? ? ? ? ? ? p=(QNode *)malloc(sizeof(QNode)); ? /*創(chuàng)建結(jié)點(diǎn)*/
? ? ? ? ? ? p->data=no;
? ? ? ? ? ? p->next=NULL;
? ? ? ? ? ? if (qu->rear==NULL) ? ? ? ? ? ? ? ? /*第一個(gè)病人排隊(duì)*/
? ? ? ? ? ? {
? ? ? ? ? ? ? ? qu->front=qu->rear=p;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? qu->rear->next=p;
? ? ? ? ? ? ? ? qu->rear=p; /*將*p結(jié)點(diǎn)入隊(duì)*/
? ? ? ? ? ? }
? ? ? ? ? ? break;
? ? ? ? case 2:
? ? ? ? ? ? if (qu->front==NULL) ? ? ? ? ? ? ? ?/*隊(duì)空*/
? ? ? ? ? ? ? ? printf(" ?>>沒有排隊(duì)的病人!\n");
? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*隊(duì)不空*/
? ? ? ? ? ? {
? ? ? ? ? ? ? ? p=qu->front;
? ? ? ? ? ? ? ? printf(" ?>>病人%d就診\n",p->data);
? ? ? ? ? ? ? ? if (qu->rear==p) ? ? ? ? ? ?/*只有一個(gè)病人排隊(duì)的情況*/
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? qu->front=qu->rear=NULL;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? qu->front=p->next;
? ? ? ? ? ? ? ? free(p);
? ? ? ? ? ? }
? ? ? ? ? ? break;
? ? ? ? case 3:
? ? ? ? ? ? if (qu->front==NULL) ? ? ? ? ? ?/*隊(duì)空*/
? ? ? ? ? ? ? ? printf(" ?>>沒有排列的病人!\n");
? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*隊(duì)不空*/
? ? ? ? ? ? {
? ? ? ? ? ? ? ? p=qu->front;
? ? ? ? ? ? ? ? printf(" ?>>排隊(duì)病人:");
? ? ? ? ? ? ? ? while (p!=NULL)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? printf("%d ",p->data);
? ? ? ? ? ? ? ? ? ? p=p->next;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? }
? ? ? ? ? ? break;
? ? ? ? case 4:
? ? ? ? ? ? if (qu->front==NULL) ? ? ? ? ? ?/*隊(duì)空*/
? ? ? ? ? ? ? ? printf(" ?>>沒有排列的病人!\n");
? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*隊(duì)不空*/
? ? ? ? ? ? {
? ? ? ? ? ? ? ? p=qu->front;
? ? ? ? ? ? ? ? printf(" ?>>病人按以下順序就診:");
? ? ? ? ? ? ? ? while (p!=NULL)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? printf("%d ",p->data);
? ? ? ? ? ? ? ? ? ? p=p->next;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? }
? ? ? ? ? ? flag=0; ? ? ? ? ? ? ? ? ? ? ? ? /*退出*/
? ? ? ? ? ? break;
? ? ? ? case 5:
? ? ? ? ? ? if (qu->front!=NULL) ? ? ? ? ? ?/*隊(duì)不空*/
? ? ? ? ? ? ? ? printf(" ?>>請(qǐng)排隊(duì)的病人明天就醫(yī)!\n");
? ? ? ? ? ? flag=0; ? ? ? ? ? ? ? ? ? ? /*退出*/
? ? ? ? ? ? break;
? ? ? ? }
? ? }
? ? p=qu->front; ?//銷毀隊(duì)列
? ? while (p!=NULL)
? ? {
? ? ? ?q=p->next; ?
? ? ? ? free(p); ?
? ? ? ? p=q;?
? ? }
}
?
int main()
{
? ? SeeDoctor();
? ? return 0;
}
運(yùn)行結(jié)果如下圖
?
總結(jié)
以上是生活随笔為你收集整理的数据结构实验-病人看病模拟程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洪水预警级别及划分确定
- 下一篇: Ajax实现原理是什么? 如何实现