c: Queue Calling in Ubuntu

/*** @file TakeNumber.h* @author your name (geovindu)* @brief * @version 0.1* @date 2023-10-20* * @copyright Copyright (c) 2023 站在巨人的肩膀上 Standing on the Shoulders of Giants* */#ifndef TAKENUMBER_H
#define TAKENUMBER_H#include <stdio.h>
#include <stdlib.h>//循环队列
#define QUEUEMAX 15/*** @brief   排队结构体   **/
typedef struct
{int num; //顾客编号long time;//进入队列时间
}DATA;/*** @brief   队列数组    **/
typedef struct
{DATA data[QUEUEMAX];int head; //队头int tail; //队尾
}QueueCalling;/*** @brief      初始化队列 ** @return      CycQueue**/
QueueCalling *QueueInit();/*** @brief       释放队列** @param       q  队列数组*/
void QueueFree(QueueCalling *q);/*** @brief     队列是否为空 ** @param       q 队列数组* @return      int*/
int QueueIsEmpty(QueueCalling *q);/*** @brief       队列是否已满** @param       q 队列数组* @return      int*/
int QueueIsFull(QueueCalling *q);/*** @brief       入队函数** @param       q 队列数组* @param       data* @return      int*/
int QueueIn(QueueCalling *q,DATA data);/*** @brief     循环队列的出队函数 ** @param       q 队列数组* @return      DATA**/
DATA *QueueOut(QueueCalling *q);/*** @brief       获取队列长度** @param       q 队列数组* @return      int 返回有多少个排队人员*/
int QueueLen(QueueCalling *q); /*** @brief       获取队定中第1个位置的数据** @param       q 队列数组* @return      DATA**/
DATA *QueuePeek(QueueCalling *q);#endif/*** @file TakeNumber.c* @author your name (you@domain.com)* @brief * @version 0.1* @date 2023-10-20* * @copyright Copyright (c) 2023 站在巨人的肩膀上 Standing on the Shoulders of Giants* */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "include/TakeNumber.h"/*** @brief     初始化队列  **/
QueueCalling *QueueInit()
{QueueCalling *q;if(q=(QueueCalling *)malloc(sizeof(QueueCalling))) //申请保存队列的内存{q->head = 0;//设置队头q->tail = 0;//设置队尾return q;}elsereturn NULL; //返回空
}
/*** @brief  释放队列   * @param q 队列数组*/
void QueueFree(QueueCalling *q)
{if (q!=NULL)free(q);
}/*** @brief       队列是否为空* @param q 队列数组*/
int QueueIsEmpty(QueueCalling *q)  
{return (q->head==q->tail);
}/*** @brief       队列是否已满* @param q 队列数组*/
int QueueIsFull(QueueCalling *q)
{return ((q->tail+1)%QUEUEMAX==q->head);
}/*** @brief       入队函数* @param q  队列数组* @param data  排队信息结构体**/
int QueueIn(QueueCalling *q,DATA data)
{if((q->tail+1)%QUEUEMAX == q->head ){printf("队列满了!\n");return 0;}else{q->tail=(q->tail+1)%QUEUEMAX;//求列尾序号q->data[q->tail]=data;return 1;}
}/*** @brief       循环队列的出队函数* @param q 队列数组*/
DATA *QueueOut(QueueCalling *q)
{if(q->head==q->tail) //队列为空{printf("队列空了!\n");return NULL;}else{q->head=(q->head+1)%QUEUEMAX;return &(q->data[q->head]);}
}/*** @brief       获取队列长度* @param q 队列数组*/
int QueueLen(QueueCalling *q)
{int n;n=q->tail-q->head;if(n<0)n=QUEUEMAX+n;return n;
}/*** @brief       获取队定中第1个位置的数据* @param q 队列数组*/
DATA *QueuePeek(QueueCalling *q)
{if(q->head==q->tail){printf("队列已经空了!\n");return NULL;}else{return &(q->data[(q->head+1)%QUEUEMAX]);}
}

/*** @file CheckTieck.h* @author your name (geovindu)* @brief * @version 0.1* @date 2023-10-20* * @copyright Copyright (c) 2023 站在巨人的肩膀上 Standing on the Shoulders of Giants* */#ifndef CHECKTIECK_H
#define CHECKTIECK_H#include <stdio.h>
#include <stdlib.h>
#include "TakeNumber.h"/*** @brief     新增顾客排列  ** @param       q  队列数组**/
void add(QueueCalling *q);/*** @brief    通知下一顾客准备   ** @param       q  队列数组**/
void next(QueueCalling *q);#endif/*** @file CheckTieck.c* @author your name (geovindu)* @brief * @version 0.1* @date 2023-10-20* * @copyright Copyright (c) 2023 站在巨人的肩膀上 Standing on the Shoulders of Giants* */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "include/CheckTieck.h"
#include "include/TakeNumber.h"//顾客序号
int num;/*** @brief       新增顾客排列* @param q*/
void add(QueueCalling *q)
{DATA data;if(!QueueIsFull(q)) //如果队列未满{data.num=++num;data.time=time(NULL);QueueIn(q,data);}elseprintf("\n排队的人实在是太多了,请您稍候再排队!\n");
}/*** @brief       通知下一顾客准备* @param q**/
void next(QueueCalling *q) 
{DATA *data;if(!QueueIsEmpty(q)) //若队列不为空{data=QueueOut(q); //取队列头部的数据printf("\n欢迎编号为%d的顾客到柜台办理业务!\n",data->num);}if(!QueueIsEmpty(q)) //若队列不为空{data=QueuePeek(q);//取队列中指定位置的数据printf("请编号为%d的顾客做好准备,马上将为您办理业务!\n",data->num);     }
}

调用:

/*** @file helloworld.c* @author your name (geovindu)* @brief * IDE vscode Ubuntu 20.* @version 0.1* @date 2023-10-20* * @copyright Copyright (c) 2023 站在巨人的肩膀上 Standing on the Shoulders of Giants* */
#include<stdlib.h>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<malloc.h>
#include<time.h>
#include "include/CheckTieck.h"
#include "include/TakeNumber.h"int main()
{printf("hello wolrd, c launguage! weblcome geovindu!涂聚文");QueueCalling *queue1;char select='1';//int num=1;//顾客序号int num=0; //叫号编号queue1=QueueInit(); //初始化队列if(queue1==NULL){printf("创建队列时出错!\n");//getch();getchar();return 0;}do{//这样处理,不会显示两次选择列表if(select=='1' || select=='2'){printf("\n请选择具体操作:\n");printf("1.新到顾客\n");printf("2.下一个顾客\n");printf("0.退出\n") ;fflush(stdin);}select=getchar();//getch();switch(select){case '1':add(queue1);printf("\n现在共有%d位顾客在等候!\n",QueueLen(queue1));break;case '2':next(queue1);printf("\n现在共有%d位顾客在等候!\n",QueueLen(queue1));break;case '0':break;}       }while(select!='0');QueueFree(queue1); //释放队列//getch();getchar();return 0;
}

输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/145622.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

践行国策,男性生育力保护与修复新启航

金秋送爽&#xff0c;丹桂飘香&#xff01;值2023年男性健康日即将到来之时&#xff0c;10月22日&#xff0c;由中国优生优育协会生育力保护与修复专业委员会、南京大学医学院附属鼓楼医院联合举办的“首届男性生育力保护与修复诊疗技术培训班”暨“中国优生优育男性生育力保护…

DASCTF-CBCTF-2023 Crypto部分复现

文章目录 EzRSACB backpack 这次比赛没打&#xff0c;记错时间了&#xff0c;看了一下&#xff0c;如果去做的话大概也只能做出那两道简单的题&#xff0c;还是太菜啦 EzRSA 题目描述&#xff1a; from Crypto.Util.number import * import random from gmpy2 import * from …

甄知科技张礼军:数智化转型助企业破茧成蝶!

数智化浪潮滚滚向前&#xff0c;正席卷各行各业&#xff0c;带领企业从数字化时代跨入数智化时代。可什么是数智化&#xff1f;如何实现数智化转型&#xff1f;已经成为横亘在无数企业面前的大难题&#xff01; 事实上&#xff0c;数智化是数字化、AI和业务三个要素的交集&…

使用rna-seq定量软件salmon运行index步骤遇到的一个问题(计算集群slurm)

salmon 帮助文档 https://salmon.readthedocs.io/en/latest/building.html#installation github主页 https://github.com/COMBINE-lab/salmon 我最开始是直接使用conda安装的 v1.4 首先第一步是对参考转录组进行索引&#xff0c;命令 salmon index -t pome.fa -i transcr…

基于Pytorch的CNN手写数字识别

作为深度学习小白&#xff0c;我想把自己学习的过程记录下来&#xff0c;作为实践部分&#xff0c;我会写一个通用框架&#xff0c;并会不断完善这个框架&#xff0c;作为自己的入门学习。因此略过环境搭建和基础知识的步骤&#xff0c;直接从代码实战开始。 一.下载数据集并加…

使用docker部署flask接口服务 一

文章目录 一&#xff1a;说明二&#xff1a;dockerfile 参数说明1. 一般常用的 参数&#xff0c;以及它的含义2. 我自己的 dockerfile 三&#xff1a;示例操作1. Gunicorn Gevent启动服务的好处2. 用Gunicorn Gevent的好处&#xff1a;3. Gunicorn Gevent的 使用示例4. 创建…

16.2 ARP 主机探测技术

ARP &#xff08;Address Resolution Protocol&#xff0c;地址解析协议&#xff09;&#xff0c;是一种用于将 IP 地址转换为物理地址&#xff08;MAC地址&#xff09;的协议。它在 TCP/IP 协议栈中处于链路层&#xff0c;为了在局域网中能够正确传输数据包而设计&#xff0c;…

ZooKeeper下载、安装、配置和使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【JS的设计模式一】

本文参考书籍 《JavaScript设计模式与开发实践》 在 JavaScript 编程中&#xff0c;this 关键字总是让人感到迷惑&#xff0c;Function.prototype.call 和 Function.prototype.apply 这两个方法也有着广泛的运用。我们有必要在学习设计模式之前先理解 这几个概念。 this Java…

浅谈压力测试的重要目标及意义

随着互联网应用的快速发展&#xff0c;软件系统的稳定性和性能成为了用户和企业关注的焦点。用户期望应用程序能够在高负载下依然保持稳定和高效。为了满足这一需求&#xff0c;压力测试成为了不可或缺的一环。本文将探讨压力测试的重要性以及如何进行压力测试。 一、压力测试的…

postgresql14-安装(一)

安装 以管理员权限运行windows版安装包&#xff0c;否则会导致安装不全。过程中记录密码。 在服务管理&#xff0c;启动postgresql服务。 管理工具pgadmin

【Docker从入门到入土 3】Docker镜像的创建方法

Part3 一、Docker镜像1.1 镜像的概念1.2 镜像结构的分层 二、Docker镜像的创建2.1 基于现有镜像创建2.1.1 创建思路2.1.2 举个例子 2.2 基于本地模板创建2.3 基于Dockerfile 创建 三、Dockerfile 详解3.1 Dockerfile 操作指令3.1.1 常用的操作指令3.1.2 CMD和ENTRYPOINT的区别…