病人看病模拟程序(队列)

// 病人看病问题(队列问题).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;
}

  

转载于:https://www.cnblogs.com/tuqunfu/p/7554918.html

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值