本项目采用顺序队列,实现挂号队列中的先进先出,后进后出的特征
具体代码如下:
/**
* 使用顺序队列,通过开辟大空间内存,避免假溢出
* 由于菜单函数问题较多,所以没有采用调用菜单函数形式,而是直接在主函数里面写出switch分支语句
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define max 1000 //有效存储100个数据
typedef struct {
int rear; //队列尾指针
int front; //队列头指针
int base[max]; //队列长度,为避免假溢出等问题,开辟1000个空间
} squene;
int init(squene * s); //队列初始化
int enquene(squene * s, int e); //入队 s是队列 e是入队元素
int dequene(squene * s, int * e); //出队 s是队列 *e是入队元素 e是地址
void show(); //遍历输出队列中元素
int main(void) {
squene s; //队列名字
int temp; //存储病历号
int choice; //存储用户选择
init(&s); //调用初始化队列函数
printf("~~~~~~~~~~~~*欢迎使用*~~~~~~~~~~~\n");
while(1){
printf("--------------菜单栏-------------\n");
printf("+-------------------------------+\n");
printf("+************1:挂号*************+\n");
printf("+-------------------------------+\n");
printf("+************2:就诊*************+\n");
printf("+-------------------------------+\n");
printf("+********3:查看排队情况*********+\n");
printf("+-------------------------------+\n");
printf("+**4:不再入队,剩下的人依次就诊**+\n");
printf("+-------------------------------+\n");
printf("+************5:下班*************+\n");
printf("---------------------------------\n");
printf("请输入你的选择:");
scanf("%d", &choice); //扫描用户输入
switch(choice) {
case 1:
printf("请输入病历号——:");
scanf("%d", &temp);
enquene(&s, temp); //用户输入数据入队列
printf("\n\n>>数据存储中,请耐心等待……\n\n");
sleep(1); //休止1s
printf("挂号成功!");
sleep(2); //休止2s
break;
case 2:
dequene(&s, &temp); //从头开始,出队列
printf(">>病人:%d号就诊——\n", temp);
sleep(2);
break;
case 3:
show(&s); //遍历输出队列中元素
sleep(4);
break;
case 4:
printf(">>不再排队,病人按照以下顺序依次就诊——\n");
show(&s);
system("pause"); //任意键继续
exit(0); //系统退出
case 5:
printf(">>下班~程序退出\n");
exit(0);
}
system("cls"); //清屏函数
}
}
/**
* 以下为数据结构顺序队列结构
*/
void show(squene * s) {
is_empty(s);
int i = 0;
for(i = s->front; i < s->rear; i++)
printf("%d号 ", s->base[i]);
printf("\n\n");
}
int init(squene * s) {
s->front = 0;
s->rear = 0;
return 1;
}
int enquene(squene * s, int e) {
s->base[s->rear] = e;
s->rear++;
return 1;
}
int dequene(squene * s, int * e) {
*e = s->base[s->front];
s->front++;
return 0;
}
int is_empty(squene * s){
if(s->rear == s->front) {
printf("当前队列病人人数为0!\n");
return 1;
} else {
return 0;
}
}
总结: 通过套用队列模型,实现排队的目的
版权声明:本文为qq_53703628原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。