当前位置: 首页 > news >正文

1.3.课设实验-数据结构-栈、队列-银行叫号系统

一.题目:

二.参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define MaxSize 3//顾客
typedef struct
{//编号 int num;//姓名char name[20]; 
}Person; //顾客所在队列的结点(带头结点) 
typedef struct LinkNode
{//数据元素 Person p;//指向下一个元素的指针 struct LinkNode *next;
}LinkNode;//顾客所在队列(链式存储)
typedef struct
{//队头指针 LinkNode *front; //队尾指针LinkNode *rear; //添加:队列当前长度int length;
}LinkQueue; /*-----------------------------------黄黄-----------------------------------*/
//初始化队列
LinkQueue InitQueue(LinkQueue &Q)
{//初始化时front指针和rear指针都指向头结点Q.front = Q.rear = (LinkNode*) malloc( sizeof(LinkNode) );//头指针指向NULLQ.front->next = NULL; // 初始化头结点的数据Q.front->p.num = 0;strcpy(Q.front->p.name, "");// 初始化队列长度Q.length = 0;//返回队列 return Q;
} //入队操作
/*p为要入队的元素*/
void EnQueue(LinkQueue &Q,Person p)
{//1.初始化一个结点LinkNode *s=(LinkNode *)malloc( sizeof(LinkNode) );//2.结点赋值s->p= p;//3.新结点s之后为NULLs->next = NULL;//4.新结点s位于尾指针之后 Q.rear->next = s;//5.新的尾指针指向sQ.rear = s; //6.队列长度加1Q.length++; 
} 
/*-----------------------------------黄黄-----------------------------------*//*-----------------------------------青格勒-----------------------------------*/
//进入不同队列的函数
/*形参需要不同队列的编号以及队列数组、新入队的元素*/
void InsertDifferentQueue(LinkQueue *lq,int var,Person p)
{//1.取出队列队尾元素的编号并加1,就是新入队的元素的编号 int numResult = 0;LinkNode *current = lq[var].front->next;while(current != NULL){if(current->p.num > numResult) {numResult = current->p.num;}current = current->next;}p.num = numResult + 1; //2.新元素入队列EnQueue(lq[var],p); 
} //用于判断进入哪个队列的函数
/*形参就是创建的3个队列的数组*/
void InsertQueue(LinkQueue *lq) //LinkQueue lq[MaxSize]改为LinkQueue *lq即使用指针传递 
{//1.输入个人信息Person p; //新入队的元素 printf("请输入姓名:");char name[20];scanf("%s",&name);strcpy(p.name,name); //2.判断是否使用智能机printf("是否使用智能机(1.是;2.否-输入编号即可):");int choose;scanf("%d",&choose);if(choose==1){//此时使用智能机,直接进入智能机队列即可InsertDifferentQueue(lq,2,p);//2.3.函数结束return; } else{//此时不使用智能机 printf("是否是vip(1.是;2.否-输入编号即可):");int choose;scanf("%d",&choose);if(choose==1){//此时直接进入vip队列即可InsertDifferentQueue(lq,0,p);//函数结束return; }else{//此时直接进入普通队列即可InsertDifferentQueue(lq,1,p);//函数结束return; } }
} 
/*-----------------------------------青格勒-----------------------------------*//*-----------------------------------赵旭文-----------------------------------*/
//打印单个队列信息
void showInfo(LinkQueue Q)
{/*注:是从头指针指向的下一个元素开始打印*///1.定义变量记录头指针指向的下一个元素LinkNode *temp=Q.front->next;//2.循环打印while(temp!=NULL){printf("编号为%d,姓名为%s->",temp->p.num,temp->p.name); temp = temp->next;} printf("\n");
} //打印全部队列信息
void showAllInfo(LinkQueue lq[MaxSize])
{//外循环是所有队列:vip队列,普通队列,智能机队列 for(int i=0;i<MaxSize;i++){if(i==0) printf("vip队列:");if(i==1) printf("普通队列:");if(i==2) printf("智能机队列:");//内循环是对单个队列的打印 showInfo(lq[i]);}
}//打印各个队列的队头元素
void showFirstInfo(LinkQueue lq[MaxSize])
{//1.循环遍历3个队列for(int i=0;i<MaxSize;i++){if(i==0) printf("vip队列当前正在办理的客户信息:");if(i==1) printf("普通队列当前正在办理的客户信息:");if(i==2) printf("智能机队列当前正在办理的客户信息:");//2.输出单个队列的队头元素,定义变量记录队尾头元素 LinkNode *temp=lq[i].front->next;printf("编号为%d,姓名为%s \n",temp->p.num,temp->p.name);  } 
} 
/*-----------------------------------赵旭文-----------------------------------*///初始化队列数据的方法 
void method(LinkQueue *lq)
{//vip队列LinkQueue vipQueue;lq[0]=InitQueue(vipQueue);Person p1={1,"张三"};EnQueue(vipQueue,p1);//普通队列LinkQueue commonQueue;lq[1]=InitQueue(commonQueue);Person p2={1,"李四"};EnQueue(commonQueue,p2);//智能机队列LinkQueue smartQueue;lq[2]=InitQueue(smartQueue);Person p3={1,"王五"}; EnQueue(smartQueue,p3); //2.打印信息printf("之前已排队的顾客如下:\n"); showAllInfo(lq);
}/*-----------------------------------吴佳峻-----------------------------------*/
//查看是否轮到自己的函数 
void ownOperate(LinkQueue lq[MaxSize])
{//判断是否轮到自己,只需要看自己所在队列的队头指针是否指向自己//1.输入所在队列编号 int result;printf("请输入所在队列(1.vip队列;2.普通队列;3.智能机队列):");scanf("%d",&result); //2.定义变量记录头指针指向的下一个元素LinkNode *temp=lq[result-1].front->next;//3.输入个人信息int num;char name[20];printf("请输入个人信息(编号和姓名):");scanf("%d",&num); scanf("%s",&name);//4.比较 if( num==temp->p.num && strcmp(name,temp->p.name)==0 ){printf("轮到自己办理 \n");printf("办理结束 \n");} else{printf("前面还有顾客,请耐心等待 \n");}
} //判断队列是否为空
bool isEmpty(LinkQueue lq[MaxSize])
{//1.输入所要查询的队列编号 int result;printf("请输入所在队列(1.vip队列;2.普通队列;3.智能机队列):");scanf("%d",&result); //2.判断 if(lq[result].front==lq[result].rear){//为空printf("该队列为空 \n");return true;}else{//不为空printf("该队列不为空 \n");return false;}
} 
/*-----------------------------------吴佳峻-----------------------------------*//*-----------------------------------黄黄-----------------------------------*/
//队头元素出队
void DeQueue(LinkQueue *lq) //用指针传递,因为真正要改数据 
{//1.循环遍历3个队列for(int i=0;i<MaxSize;i++){//2.判断是否为空 if(lq[i].front==lq[i].rear){//为空printf("当前队列没有顾客。 \n");return; }else{//不为空 //3.记录当前队列头元素 LinkNode *p=lq[i].front->next;//4.头元素要出队,那么头元素的下一个元素就是新的头元素 lq[i].front->next = p->next;//5.尾指针指向当前对头同一元素时,修改队尾指针 if(lq[i].rear==p) lq[i].rear=lq[i].front;//6.释放空间 free(p);return;}} 
} 
/*-----------------------------------黄黄-----------------------------------*/int main()
{//1.初始化3个队列LinkQueue lq[MaxSize];method(lq);//2.操作界面printf("------------------------------------------------------------- \n");printf("             欢迎来到银行办理业务中心              \n"); printf("      1.取工资                  2.判断当前队列是否为空 \n"); printf("      3.查看当前正在办理的顾客  4.查看是否轮到自己 \n");printf("      5.查看正在排队的顾客      6.停止办理 \n");printf("------------------------------------------------------------- \n");//3.开始操作 while(true){//4.定义变量记录要操作的选项int choose;printf("请输入接下来的操作:");scanf("%d",&choose);//5.操作实现switch(choose){case 1:{//进入其中一个队列 InsertQueue(lq);printf("------------------------------------------------------------- \n");break;}case 2:{isEmpty(lq);printf("------------------------------------------------------------- \n");break;}	case 3:{//显示当前处理的元素 showFirstInfo(lq);//当前处理的元素即队头元素出队 DeQueue(lq);printf("------------------------------------------------------------- \n");break;}case 4:{ownOperate(lq);printf("------------------------------------------------------------- \n");break;} case 5:{//查看正在排队的客户  showAllInfo(lq);printf("------------------------------------------------------------- \n");break;}case 6:{printf("正在退出,请稍等。");exit(0);}default:{printf("不存在该选项 \n");printf("------------------------------------------------------------- \n");break;}} }return 0;
}

http://www.dtcms.com/a/569214.html

相关文章:

  • 网站如何做监测链接做问卷赚钱的网站
  • 做网站好还是做app好人工智能建筑设计软件
  • 云计算——虚拟化介绍
  • 电力电子技术 第十四章——AC/AC转换器
  • MIT-归并排序和快速排序
  • 乐鑫ESP32-C2小尺寸高性价比,物联网应用的理想无线连接方案
  • 1.4.课设实验-数据结构-单链表-文教文化用品品牌2.0
  • 广州网站制作公司排名wordpress切换语言实现
  • 门户网站开发需求分析建设网站图片高清
  • PHP 表单 - 验证邮件和URL
  • 自己感觉好点的东西
  • 计算机网络自顶向下方法30——运输层 网络拥塞控制中的公平性
  • 专门做隐形眼镜的网站seo的中文含义是什么意思
  • O2O行业风口下的运营策略与定制开发AI智能名片S2B2C商城小程序的应用研究
  • 新建代码仓库后,初始化仓库
  • 龙川做网站的wordpress 文章折叠
  • Glances服务器硬件资源监控工具
  • Docker(三)_容器打包
  • 专业做网站有哪些上海机械网站建设
  • Spring Boot异步接口性能优化:从单线程到高并发的优化历程
  • App通信:HTTP与JSON全解析
  • 网站推广什么意思资料网站怎么做的
  • win10本地部署weknora记录
  • 7、webgl 基本概念 + 前置数学知识点(向量 + 矩阵)
  • 寻花问柳专做男人的网站高端网站建设设计公司哪家好
  • Rust开发实战之RESTful API客户端开发
  • C++ 锁类型大全详解
  • 智慧园区:智能管理赋能未来发展新生态
  • 潮州 网站建设个人静态网站首页怎么做
  • 东莞网站建站推广wordpress导入演示数据