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