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.mzph.cn/news/111779.shtml

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

相关文章

nginx 内存管理(一)

文章目录 前提知识nginx内存管理的基础内存分配不初始化封装malloc初始化malloc 内存池内存池结构清理函数cleanup大块内存large 创建内存池申请内存void *ngx_palloc(ngx_pool_t *pool, size_t size)void *ngx_pnalloc(ngx_pool_t *pool, size_t size)void *ngx_pcalloc(ngx_p…

6 个可解锁部分 GPT-4 功能的 Chrome 扩展(无需支付 ChatGPT Plus 费用)

在过去的几个月里&#xff0c;我广泛探索了 ChatGPT 的所有可用插件。在此期间&#xff0c;我发现了一些令人惊叹的插件&#xff0c;它们改进了我使用 ChatGPT 的方式&#xff0c;但现在&#xff0c;我将透露一些您需要了解的内容。 借助 Chrome 扩展程序&#xff0c;所有 Chat…

单片机判断语句与位运算的坑

一.问题描述 在我判断Oled的某点的值是否为1时,用到了如下判断语句 if(oled[x][y/8] &1<<(y%8)但是,当我将其改为如下的判断语句,代码却跑出BUG了 if((oled[x][y/8]&1<<(y%8))1)二.原因分析 1.if语句理解错误 首选让我们看看下面的代码运行结果 #inc…

Django中ORM框架的各个操作

我们会好奇&#xff0c;python这么简洁的语言&#xff0c;数据查询是如何做的呢&#xff1f;我将进一步详细和深入地介绍Django中ORM框架的各个方面&#xff0c;包括MySQL的增删改查和复杂查询。让我们分步骤进行。 ORM框架介绍 Django的ORM框架是一个用于与数据库进行交互的工…

Stable Diffusion WebUI扩展a1111-sd-webui-tagcomplete之Booru风格Tag自动补全功能详细介绍

安装地址 直接附上地址先: Ranting8323 / A1111 Sd Webui Tagcomplete GitCodeGitCode——开源代码托管平台,独立第三方开源社区,Git/Github/Gitlabhttps://gitcode.net/ranting8323/a1111-sd-webui-tagcomplete.git上面是GitCode的地址,下面是GitHub的地址,根据自身情…

Kotlin Compose Multiplatform 跨平台开发实践之加入 iOS 支持

前言 几个月前 Compose Multiplatform 的 iOS 支持就宣布进入了 Alpha 阶段&#xff0c;这意味着它已经具备了一定的可用性。 在它发布 Alpha 的时候&#xff0c;我就第一时间尝鲜&#xff0c;但是只是浅尝辄止&#xff0c;没有做过多的探索&#xff0c;最近恰好有点时间&…

idea Java代码格式化规范

文章目录 引入基础知识代码模板idea模板eclipse模板1.安装插件2.生成配置文件3.导入配置文件 附录一&#xff1a;xml配置项说明附录二&#xff1a;赠送 引入 最近在公司开发中&#xff0c;遇到了一点小问题&#xff0c;组内各同事的格式化规范不一致。一来导致代码样式并不统一…

从零开始搭建第一个django项目

目录 配置环境创建 Django 项目和 APP项目组成  ‍子目录文件组成应用文件组成 配置 settings.py启动项目 数据表创建models.pyDjango-models的常用字段和常用配置 Django-admin 引入admin后台和管理员外键views.pyurls.pypostman接口测试 QuerySetInstance功能APIView 的概念…

线程池在项目中的使用

1.runAsync执行完后无返回值 package com.search.thread; import java.util.concurrent.*; public class ThreadTest {public static ExecutorService executor Executors.newFixedThreadPool(10);public static void main(String[] args) throws ExecutionException, Interr…

[架构之路-240]:目标系统 - 纵向分层 - 应用层 - 应用层协议与业务应用程序的多样化,与大自然生物的丰富多彩,异曲同工

目录 前言&#xff1a; - 倒金子塔结构 - 大自然的组成 一、应用层在计算机系统中的位置 1.1 计算机应用程序的位置 1.1.1 业务应用程序概述 1.1.2 应用程序的分类 - 按照计算机作用范围 1.1.3 业务应用程序分类 - 按照行业分类 1.2 网络应用协议的位置 1.2.1 网络协…

django建站过程(1)

django建站过程&#xff08;1&#xff09; 使用pycharm创建过程运行项目创建数据库创建超级用户登录生成的后台&#xff1a;界面本地化 准备以django,bootstrap来做一个过程记录&#xff0c;文章主要阐述过程的细节。 使用pycharm创建过程 创建项目“schoolapps”&#xff0c;…

【Java异常】什么是异常,Java中如何处理异常?

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Java异常处理 1. 了解异常&#xff1a;2. 异常…

探索未来的视觉革命:卷积神经网络的崭新时代(一)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

unigui添加ssl(https)访问的方法

首先到腾讯云或者阿里云去申请免费的证书&#xff0c;前提是在该服务商那有申请过域名&#xff0c;怎么找出这个界面&#xff1f;网页顶部一般都有个搜索框&#xff0c;输入【证书】或者【SSL】就能看到了&#xff0c;然后点击申请免费证书&#xff0c;把解析信息填入自己的域名…

Allegro两种自动对齐方法

本法基于cadence的allegro可以在PCB设计运用&#xff0c;使用方法如下&#xff1a; 方式一&#xff1a;allegro软件的自动对齐——使用过程繁琐一点 1.在“setup”下拉选项中选择“application mode”&#xff0c;在副选项中选择“placement edit”&#xff1b; 2.在“Find”…

Mac电脑无法识别移动硬盘怎么办?

很多人都喜欢在Mac电脑上办公、学习&#xff0c;但有时我们将移动硬盘连接Mac电脑时&#xff0c;却会发现电脑无法识别移动硬盘。那么&#xff0c;Mac电脑无法识别移动硬盘怎么办呢&#xff1f; Mac无法识别移动硬盘的原因 导致Mac不识别移动硬盘的原因有很多&#xff0c;你可…

【Andriod】adb调试安卓手机时连接真机或模拟器的3种方法,你知道么?

一.adb是什么&#xff1f; adb 称之为&#xff1a;Android 调试桥 &#xff08;Android Debug Bridge &#xff09;是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具&#xff0c;它可为各种设备操作提供便利&#xff0c;如安装和调试应用&#xff0c;并提供对 Un…

软考-网络安全体系与网络安全模型

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 by 2023年10月 网络安全体系相关安全模型 BLP机密性模型 BLP&#xff08;Biba-格雷泽-麦克拉伦&#x…

centos 7.9离线安装wget

1.下载安装包 登录到wget官网上下载最新的wget的rpm安装包到本地 http://mirrors.163.com/centos/7/os/x86_64/Packages/ 2.上传安装包到服务器 3.安装 rpm -ivh wget-1.14-18.el7_6.1.x86_64.rpm 4.查看版本 wget -V

Cesium Vue(七)— GEOJSON数据展示

1. GeoJSON GeoJSON 是一种用于对各种地理数据结构进行编码的格式。 简而言之&#xff0c;GeoJSON为你提供了一种简单的格式来表示简单的地理特征以及它们的非空间属性。 结构&#xff1a; {"type": "Feature","geometry": {"type"…