// 病人看病问题(队列问题).cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.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;
qu = (QuType *)malloc(sizeof(QuType));
qu->front = qu->rear = NULL;
while (flag==1)
{
printf_s("1:排队 2:就诊 3:查看排队 4:不再排队,余下依次就诊 5:下班 请选择:");
// 排队即入队列
// 就诊即出队列
// 查看排队即输出队列
scanf_s("%d", &sel);
switch (sel)
{
case 1:
printf_s(">> 输入病历号:");
do
{
scanf_s("%d", &no);
find = 0;
p = qu->front;
while (p!=NULL &&! find)
{
if (p->data == no)
{
find = 1;
}
else
{
p = p->next;
}
}
if (find)
{
printf_s("输入的病历号重复了!");
}
} 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; // 原对尾元素next指向新的队尾元素
qu->rear = p; // 队尾指针指向新的队尾元素
}
break;
case 2:
if (qu->front == NULL)
{
printf_s(">>没有排队的病人!");
}
else
{
p = qu->front;
printf_s(">>病人%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_s(">>没有排队的病人!\n");
}
else
{
p = qu->front;
printf_s(">>排队病人:");
while (p!=NULL)
{
printf_s("%d \t\t", p->data);
p = p->next;
}
printf_s("\n");
}
break;
case 4:
if (qu->front == NULL)
{
printf_s(">>没有排队的病人!\n");
}
else
{
p = qu->front;
printf_s("病人按以下顺序就诊:");
while (p!=NULL)
{
printf_s("%d", p->data);
p = p->next;
}
printf_s("\n");
}
flag = 0;
break;
case 5:
if (qu->front != NULL)
{
printf_s("请排队的病人明天就医!\n");
}
flag = 0;
break;
default:
break;
}
}
}
int main()
{
SeeDoctor();
int s = 0;
scanf_s("%d", &s);
return 0;
}