设计一个程序,反映病人到医院看病、排队看医生的情况。
要求:采用链队列存储结构
参考:施老师等编著的《数据结构》
/*蓝多多 算法作业*/
#include "malloc.h"
#include"stdio.h"//蓝多多算法与数据结构实验四(二)链队
#include <iostream>
#include<iomanip>
#include <string.h>
using namespace std;
typedef char QElemType;
typedef struct QNode {
QElemType data[10];
struct QNode* next;
}Qnode, * QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue; //链队类型
int main()
{
int choice, flag = 1;
LinkQueue lq;
QNode* s, * p;
char name[15];
lq.front = (QueuePtr)malloc(sizeof(QNode));//创建队列的头结点
lq.front->next = NULL;
lq.rear = lq.front;
while (flag == 1)
{
cout << "请输入您的选择:1:排队 2:看医生 3:查看排队 0:下班 :" << endl;
cin >>choice;
switch (choice)//根据用户的不同选择,进行分类处理
{
case 0:
if (lq.front != lq.rear)
cout << "您好,目前已经下班,请排队的患者改天再来就医。" << endl;
flag = 0;
break;
case 1:
cout << "请输入患者的姓名:" << endl;
cin >> name;
s = (QueuePtr)malloc(sizeof(QNode));//创建新节点
strcpy_s(s->data, name);//将name copy 给s->data
s->next = NULL;
lq.rear->next = s; lq.rear = s;//插入节点到队尾
break;
case 2:
if (lq.front == lq.rear)
cout << "没有排队的患者" << endl;
else//队列不为空时队头元素出队
{
s = lq.front->next;
lq.front->next = s->next;
if (lq.rear == s)
lq.rear = lq.front;//最后一个元素出队后队列为空
cout << s->data << "看医生" << endl;
free(s);
}
case 3:
if (lq.front == lq.rear)
cout << "没有排队的患者" << endl;
else//队列不为空时依次输出队列中的元素
{
p = lq.front->next;
cout << "排队的患者如下:" << endl;
while (p != NULL)
{
cout << p->data<<setw(6);
p = p->next;
}
cout << endl;
}
break;
}
}
}