IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 数据结构-病人看病排队模拟程序C语言版 -> 正文阅读

[C++知识库]数据结构-病人看病排队模拟程序C语言版

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;
typedef struct QNode{
	int data;
	struct QNode *next;
}QNode,*QueuePtr;
struct LinkQueue{
	QueuePtr front;
	QueuePtr rear;
};
LinkQueue Q;
int deletedCount = 0;

void menu();
void QueueUp();
void Treatment();
void Display();
void Count();
Status QueueEmpty(LinkQueue);
//初始化队列
Status InitQueue(LinkQueue &Q){
	Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
	if(!Q.front) exit(OVERFLOW);
	Q.front -> next = NULL;

	return OK;
}
//在队尾插入新元素
Status EnQueue(LinkQueue &Q,int e){
	QueuePtr p;

	p = (QueuePtr)malloc(sizeof(QNode));
	if(!p) exit(OVERFLOW);
	p -> data = e;
	p -> next = NULL;
	Q.rear -> next = p;
	Q.rear = p;

	return OK;
}
//删除对头元素
Status DeQueue(LinkQueue &Q,int &e){
	QNode *p;

	if(QueueEmpty(Q)) return ERROR;
	p = Q.front -> next;
	e = p -> data;
	Q.front -> next = p -> next;
	if(Q.rear == p)
		Q.rear = Q.front;
	free(p);
	deletedCount++;

	return OK;
}
 //求队列中元素的个数
 int QueueLength(LinkQueue Q){
               QueuePtr p;
               int length = 0;

               if(Q.front == NULL)  exit(ERROR);
               p = Q.front;
               while(p != Q.rear){
                              length++;
                              p = p -> next;
               }

 	return length;
 }
 //检查是否为空队列
 Status QueueEmpty(LinkQueue Q){
 	return Q.front == Q.rear;
 }
 //排队
void QueueUp(){
	int newNum,count;

	//printf("QueueUp");
	//InitQueue(Q);

	printf("\n\n\n\t\t请输入序号:");
	scanf ("%d",&newNum);
	EnQueue(Q,newNum);
	count = QueueLength(Q);

	//成功插入元素后,显示排在前面总共有多少人
	printf("\n\n\n\t\t您排在队伍里第 %d 位\n\t\t前面还有 %d 位顾客.",count,count - 1);

	printf("\n\n\t\t请按任意键返回主菜单\n\n\n");
	system("pause");
	getchar();
	system("CLS");
	menu();
}
//支付 
void Treatment(){
	int e;
	//printf("Treatment");
	if(!QueueEmpty(Q)){
		DeQueue(Q,e);
		printf("\n\n\n\t请序号为 %d 的顾客支付.",e);
	}
	else
		printf("\n\n\t\t当前没有顾客在排队!");

	printf("\n\n\t请按任意键返回主菜单\n\n\n");
	system("pause");
	getchar();
	system("CLS");
	menu();
}
//查看排队
void Display(){
	QueuePtr p;
	//printf("Display");
	if(!QueueEmpty(Q)){
		//输出所有已排队的
		printf("\n\n\n\t从对首到队尾所有排队人的序号为:");
		p = Q.front -> next;
		while(p != NULL){
			printf("\n\t%d",p -> data);
			p = p -> next;
		}
	}
	else
		printf("\n\n\t\t当前没有人在排队!");

	printf("\n\n\t请按任意键返回主菜单\n\n\n");
	system("pause");
	getchar();
	system("CLS");
	menu();
}
//统计已支付和未支付人数
void Count(){
	//printf("Count");
	printf("\n\n\n\t\t已支付人数:%d",deletedCount);
	printf("\n\t\t未支付人数:%d",QueueLength(Q));

	printf("\n\n\t\t请按任意键返回主菜单\n\n\n");
	system("pause");
	getchar();
	system("CLS");
	menu();
}

void menu(){
	int select;

	printf("\n\n\t\t  杂货店排队模拟程序");
	printf("\n\n\t\t\t1.排队.");
	printf("\n\t\t\t2.支付.");
	printf("\n\t\t\t3.查看排队.");
	printf("\n\t\t\t4.统计并查看已支付和未支付人数.");
	printf("\n\t\t\t5.退出.");
	printf("\n\n\t\t请输入数字选择相应操作:");
	do{
		scanf("%d",&select);

		switch(select){
			case 1:
				system("CLS");
				QueueUp();
				break;
			case 2:
				system("CLS");
				Treatment();
				break;
			case 3:
				system("CLS");
				Display();
				break;
			case 4:
				system("CLS");
				Count();
				break;
			case 5:
				system("CLS");
				break;
			default:
				printf("\n\t\t错误!请重新输入数字选择相应操作:");
		}
	}while(!(select > 0 && select <= 5));
}

int main(){
    InitQueue(Q);
	menu();

	return 0;
}


  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:09:27  更:2021-11-22 12:09:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:41:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码