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.rhkb.cn/news/164302.html

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

相关文章

QT读取Excel表格内容到Table Widget

QT读取Excel表格内容到Table Widget_qt导入excel-CSDN博客有一个需求是要把Excel的数据导入到QT的Table Widget表格中。我是一个QT新手&#xff0c;在网上找了很多方法&#xff0c;在这里汇总记录一下。目前总共有四种方法&#xff1a;其中方法适用于不加密的Excel文件&#xf…

[已解决]Unable to connect to broker 0

[已解决]Unable to connect to broker 0 问题 Unable to connect to broker 0 kafka tool 工具无法查看主题 思路 在window的hosts添加上kafka服务器的ip和对应的域名 解决 成功解决&#xff01;

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-[4]客户端与服务端连接

红队专题 招募六边形战士队员服务端编写新建工程server函数创建主线程类获取配置信息运行command 命令头文件里创建引用win32 类库/头文件startsocket 开始监听 类函数添加类StartSocketmysend/myrecv 设置 m_sockCommon 头文件MSGINFO_S 结构体 ThreadMain头文件runflag 启动 …

“权限之舞:Linux安全之道”

W...Y的主页&#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a; 在之前的Linux博客中&#xff0c;我们学习了基础的Linux指令&#xff0c;具体可以订阅一下博主的Linux专栏学习。当我们想进行递归删除文件时等等许多操作中&#xff0c;只有在root账号中…

碰到it运维故障怎么办丫?突发IT事故怎么快速解决?

随着信息技术的快速发展&#xff0c;企业对于IT系统的依赖程度越来越高。但IT系统突发事件的风险也在不断增加&#xff0c;例如突发故障&#xff0c;例如数据泄露、例如数据入侵等等。那碰到这种it运维故障怎么办&#xff1f;突发IT事故怎么快速解决&#xff1f; 碰到it运维故障…

竞赛 深度学习人体语义分割在弹幕防遮挡上的实现 - python

文章目录 1 前言1 课题背景2 技术原理和方法2.1基本原理2.2 技术选型和方法 3 实例分割4 实现效果5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人体语义分割在弹幕防遮挡上的应用 该项目较为新颖&#xff0c;适合作为竞…

centos7安装erlang23.3.4.11及rabbitmq3.9.16版本

rpm包有系统版本要求&#xff0c;el是Red Hat Enterprise Linux(EL)的缩写。 EL7是Red Hat 7.x&#xff0c;Centos 7.x EL8是Red Hat 8.x, Centos 8.x 所以我们在安装erlang及rabbitmq时需要选择与自己的服务器相对应的rpm包 # rabbitmq的rpm安装包 https://github.com/rabbi…

【使用OpenCV进行目标分割与计数的代码实例详解】

文章目录 概要实例一&#xff1a;硬币分割计数实例二&#xff1a;玉米粒分割计数 概要 在当今数字图像处理领域&#xff0c;图像分割技术是一项至关重要的任务。图像分割旨在将图像中的不同目标或区域准确地分开&#xff0c;为计算机视觉、图像识别和机器学习等领域提供了坚实…

kr 第三阶段(一)16 位汇编

为什么要学习 16 位汇编&#xff1f; 16 位汇编包含了大部分 32 位汇编的知识点。有助于在学习内核的两种模式。 实模式&#xff1a;访问真实的物理内存保护模式&#xff1a;访问虚拟内存 有助于提升调试能力&#xff0c;调试命令与 OllyDbg 和 WinDebug 通用。可以学习实现反…

linux性能分析(三)查看系统的性能指标

一 查看系统的性能指标 这里简略的将系统监控指标分为&#xff1a;cpu、memory、disk、network、os 五大类强调&#xff1a; 这五类命令的输出与/proc虚目录下的文件信息强相关说明&#xff1a; 后续专门讲解这五大类的系统命令,尽可能全面罗列每个工具的使用场景补充&#x…

基于LSTM的天气预测 - 时间序列预测 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 机器学习大数据分析项目 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/po…

React函数式写法和类式写法的区别(以一个计数器功能为例子)

函数式写法更加简洁和函数式编程思维导向&#xff0c;适用于无状态、UI纯粹的组件&#xff0c;且可以使用Hooks处理副作用。而类式写法适用于有内部状态、生命周期方法和复杂交互逻辑的组件&#xff0c;提供了更多的灵活性和控制力。 文章目录 一、计数器功能演示 1.函数式写法…

uniapp(uncloud) 使用生态开发接口详情5(云公共模块)

1.uniCloud官网 云对象中云公共模块: 网站: https://uniapp.dcloud.net.cn/uniCloud/cf-common.html // 官网介绍 cloudfunctions├─common // 云函数公用模块目录| └─hello-common // 云函数公用模块| ├─package.json| └─index.js // 公用模块代码&#xff0…

R语言处理数量很大(千万级及以上)的数据时的拆分策略-案例一

主要是用R中的groupb_by和 summarise分组查询和统计数据量

vlookup函数踩坑(wps)

使用wps的朋友看过来 vlookup函数踩坑&#xff0c;vlookup&#xff08;查找值&#xff0c;查找范围&#xff0c;返回值的索引&#xff0c;精确查找or模糊查找&#xff09; 我们要查找的数据的那一列&#xff0c;必须是查找范围的第一列&#xff01; 案例&#xff0c;看下面的…

Jmeter用于接口测试中,关联如何实现

Jmeter用于接口测试时&#xff0c;后一个接口经常需要用到前一次接口返回的结果&#xff0c;应该如何获取前一次请求的结果值&#xff0c;应用于后一个接口呢&#xff0c;拿一个登录的例子来说明如何获取。 1、打开jmeter, 使用的3.3的版本&#xff0c;新建一个测试计划&#…

【MyBatis】mvc模式以及Mapper文件中的namespace以及ORM思想

目录 什么是MVC三层架构&#xff0c;初步了解&#xff1f; namespace的作用是什么&#xff1f; Mapper文件中的namespace&#xff1f; ORM思想&#xff08;对象关系映射思想&#xff09; 其中提供了一套映射规则和API 什么是MVC三层架构&#xff0c;初步了解&#xff1f; 三…

以哈战争或推动美国「屠杀」比特币

摘要&#xff1a;加密货币公司急于在国会对以色列被袭引发的审查之前采取行动。 作者&#xff1a;JASPER GOODMAN 来源&#xff1a;POLITICO 编译&#xff1a;WEEX Exchange 原文标题&#xff1a;How Elizabeth Warren is making Hamas crypto’s latest Washington woe 编者按…

TODO Vue typescript forEach的bug,需要再核實

forEach 一個string[]&#xff0c;只有最後一個匹配條件有效&#xff0c;其它條件無效。 所以&#xff0c;只能替換成普通的for循環。 console.log(taskList)// for (const _task of taskList.value) {// if (_task invoiceSendEmail) {// form.value.invoiceSendEmail…

RESR开发

REST简介 REST(Representation State Transfer),表现形式状态转换 优点 隐藏资源的访问行为&#xff0c;无法通过地址得知对方资源是何种操作书写简化 按照REST风格访问资源时使用行为动作区分对资源进行了何种操作。 根据REST风格对资源进行访问是RESTFUL REST风格 Restfu…