c: Queue Calling in Ubuntu

news2024/11/15 17:16:46
/**
 * @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;
    }else
        return 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);
    }
    else
        printf("\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.coloradmin.cn/o/1113993.html

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

相关文章

绝了!!AI写作神器,自动写小说真的牛

宝子们&#xff0c;这个写小说的神器有点牛&#xff01;尊的是宝藏写作神器啊&#xff01;分分钟写出小说&#xff0c;就连作文&#xff0c;论文都能写&#xff0c;这也太神了吧&#xff01; 使用炒鸡简单&#xff01;新手都能用 输入文字后就能得到你需要的文章 还有超多功…

Kubernetes技术与架构-Ingress Controller

Ingress Controller控制器是实现Ingress对象的定义的组件&#xff0c;也即网关&#xff0c;负责Kubernetes集群内流量的分发&#xff0c;Kubernetes可以运行多个Ingress Controller控制器实例&#xff0c;不同的Ingress定义可以使用不同的Ingress Controller控制器实现&#xf…

插入排序(学习笔记)

插入排序 每一轮插入排序后的结果与打扑克牌取牌原理相似&#xff0c;将取到的牌插入到合适的位置&#xff0c;但在程序实现方面还是基于交换的算法。 它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而一个新的、记录数增1的有序表。 import java.util.…

vlookup函数踩坑(wps)

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

使用guacamole进行WEB远程桌面连接

Apache Guacamole 是一个无客户端的远程桌面网关。它支持标准协议&#xff0c;如 VNC、RDP 和 SSH&#xff0c;甚至还支持k8s、telnet连接。它可以在任何有网络的地方连接上你的服务器和Windows主机。可以同时连接多个终端&#xff0c;并且能够无缝切换。本文采用docker进行部署…

4.9 多协议标记交换MPLS

思维导图&#xff1a; 前言&#xff1a; **4.9 多协议标记交换MPLS笔记** 1. **定义与背景**&#xff1a; - MPLS (多协议标记交换) 是一种由 IETF 开发的新协议。 - “多协议”意味着 MPLS 的上层可以使用多种协议。 - 该协议综合了多家公司的技术&#xff0c;如 C…

LiveGBS流媒体平台GB/T28181常见问题-国标平台通道数为0无法播放的时候如何抓包分析windows抓包和Linux抓包

LiveGBS通道数为0无法播放的时候如何抓包分析windows抓包和Linux抓包 1、第一步&#xff1a;抓包工具准备1.1、Linux1.2、windows 2、第二步&#xff1a;找到设备出口ip3、第三步&#xff1a;执行命令抓设备出口ip3.1 Linux3.2 Windwos 4、第四步&#xff1a;触发相关页面操作4…

比例伺服阀放大器厂家

比例阀放大器具有以下优点&#xff1a; 高精度&#xff1a;比例阀放大器能够根据输入信号的微小变化实时调整输出信号&#xff0c;从而实现对液压系统的精确控制。快速响应&#xff1a;比例阀放大器能够快速响应输入信号的变化&#xff0c;并迅速调整输出信号&#xff0c;以满…

【标准化封装 SOT系列 】 D SOT-323 SOT-363

〇、关键词 SC70 。 一、D部分 SOT-323 SOT-363 这个应该叫SC-70可能更合适&#xff0c;典型特征 pin 间距 0.65mm ; body size 2.0mm1.25mm 这一节很像SOT-23&#xff0c;即A部分&#xff0c;因此也是最容易被混淆的。 二、SC70-3 / -5/ -6 鉴于此&#xff0c;封装最好给…

Oracle 19c OCM讲义课程:应用SQL执行计划基线的案例

使用SQL执行计划基线可以保证SQL的性能不下降&#xff0c;但实际生产中默认没有开启&#xff0c;这里是姚远老师在给OCM的学员授课中关于SQL执行计划基线的一个案例&#xff0c;大家可以借鉴一下。 关于号主&#xff0c;姚远&#xff1a; Oracle ACE&#xff08;Oracle和MyS…

eNSP-OSPF协议其他区域不与骨干区域相连解决方法1

OSPF多进程路由重分布 AR1 [ar1]int g0/0/0 [ar1-GigabitEthernet0/0/0]ip add 192.168.1.1 24 [ar1-GigabitEthernet0/0/0]quit [ar1]ospf [ar1-ospf-1]area 0 [ar1-ospf-1-area-0.0.0.0]net 192.168.1.0 0.0.0.255 [ar1-ospf-1-area-0.0.0.0]quitAR2 [ar2]int g0/0/0 [ar2…

C++ 类和对象(1)

大纲 初步认识类和对象 c语言是面向过程的 关注的是过程 分析出求问题的步骤 通过调用函数逐步解决 c是基于面向对象的 关注的是对象 将一件事情拆分成不同的对象 靠对象之间的交互完成 举个栗子 把大象关进冰箱。 面向过程的分析过程&#xff1a; 第一步&#xff1a;把冰…

优思学院|六西格玛的发展历程是怎样的?

在商业世界的星空中&#xff0c;有一颗璀璨的星星&#xff0c;它的名字叫做六西格玛。这颗星星不是一夜之间闪耀登场的&#xff0c;而是在商界的无尽深夜中&#xff0c;逐渐积累了耀眼的光芒。今天&#xff0c;我就来为大家介绍一下六西格玛的发展历程吧。 西格玛是啥&#xff…

nginx+apach+数据恢复+apk小练习hunan

这份练习来自项师兄,我们湖南警官的新一代大佬向专家,我就向师兄讨要了检材一份,然后自己练习一下在csdn写一下我的刷题经历,如有错误,还请指正,另外可以看向师兄的微信公众号 2023某省电子取证比武wp“ 参加比赛侥幸拿下第一,发一发复盘wp,大佬勿喷,如有错误请指出,…

R语言:因子分析 factor analysis

文章目录 因子分析数据集处理步骤主成分法做因子分析最大似然法做因子分析 因子分析 因子分析的用途与主成分分析类似&#xff0c;它也是一种降维方法。由于因子往往比主成分更易得到解释&#xff0c;故因子分析比主成分分析更容易成功&#xff0c;从而有更广泛的应用。 从方法…

Mac文件对比同步工具 Beyond Compare 4.4.7

Beyond Compare 4 是一款强大的文件和文件夹比较工具。它提供了一个直观的界面&#xff0c;使您可以快速比较和同步文件和文件夹。 Beyond Compare 4 具有许多有用的功能&#xff0c;包括比较和合并文件、文件夹和压缩文件&#xff0c;以及同步文件和文件夹。它支持各种类型的文…

万圣节海外网红营销:助力品牌赢得消费者的心

万圣节&#xff0c;源自古代凯尔特文化&#xff0c;如今已成为一个全球性的节庆。它不仅是一个传统的庆祝活动&#xff0c;还是商业和品牌推广的黄金机会。在当今数字时代&#xff0c;社交媒体和网红文化已经成为品牌推广的重要渠道。万圣节为品牌提供了一个独特的机会&#xf…

点进来看看要如何在Telegram上找到目标群组

Telegram作为目前除了WhatsApp之外&#xff0c;在苹果应用商店市场第二高下载量的社交媒体平台是我们出海企业不可以错过的资源。而且就在日前海外科技媒体TechCrunch爆料称&#xff0c;Telegram正与腾讯展开合作&#xff0c;有望将Telegram打造为一个类似微信的“超级应用生态…

java 使用poi读取excel内浮动图片

注意&#xff1a;仅读取到xls中的浮动图片&#xff0c;嵌入图片此方法读取不到 1、引入poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><depen…

C++11包装器

文章目录 1.当前程序的问题2.包装器的引入2.1包装器的定义2.2包装器的使用2.3包装器的出现对于2.1问题的解决 3.包装器的应用3.1C98写法3.2C11写法count()的用法下标运算符operator[ ]lambda表达式的另一种用法C11写法 1.当前程序的问题 template<class T, class K> K u…