首页 > 其他分享 >c: Queue Calling

c: Queue Calling

时间:2023-10-19 15:03:35浏览次数:38  
标签:return 队列 brief param QueueCalling Queue int Calling

 

/**
 * *****************************************************************************
 * @file        TakeNumber.h
 * @brief       排队等号
 * @author       (geovindu,Geovin Du,涂聚文)
 * @date        2023-10-19
 * @copyright   geovindu 站在巨人的肩膀上 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
 * @brief       排队等号
 * @author       (geovindu,Geovin Du,涂聚文)
 * @date        2023-10-19
 * @copyright   geovindu 站在巨人的肩膀上 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
 * @brief       排队等号
 * @author       (geovindu,Geovin Du,涂聚文)
 * @date        2023-10-19
 * @copyright   geovindu 站在巨人的肩膀上 Standing on the Shoulders of Giants
 * *****************************************************************************
 */

#ifndef CHECKTIECK_H
#define CHECKTIECK_H


#include <stdio.h>
#include <stdlib.h>
#include "TakeNumber.h"

//顾客序号 
  int num;

/**
 * @brief     新增顾客排列   
 * 
 * @param       q  队列数组
 * 
 */
void add(QueueCalling *q);

/**
 * @brief    通知下一顾客准备    
 * 
 * @param       q  队列数组
 * 
 */
void next(QueueCalling *q); 

#endif

  

 

/**
 * *****************************************************************************
 * @file        CheckTieck.c
 * @brief       排队等号
 * @author       (geovindu,Geovin Du,涂聚文)
 * @date        2023-10-19
 * @copyright   geovindu 站在巨人的肩膀上 Standing on the Shoulders of Giants
 * *****************************************************************************
 */


#include <stdio.h>
#include <stdlib.h>
#include "include/CheckTieck.h"





/**
 * @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);      
    }
}

  

调用:

#include "include/CheckTieck.h"
#include "include/TakeNumber.h"






int main()
{

    printf("hello c world \n");
    printf("你好,中国\n");

    QueueCalling *queue1;
    int iii,nnn;
    char select;
    //int num=1;//顾客序号 
    num=0; //叫号编号
    queue1=QueueInit(); //初始化队列 
    if(queue1==NULL)
    {
        printf("创建队列时出错!\n");
        getch();
        return 0;
    }
    do{
        printf("\n请选择具体操作:\n");
        printf("1.新到顾客\n");
        printf("2.下一个顾客\n");
        printf("0.退出\n") ;
        fflush(stdin);
        select=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();



    //内存分配函数 malloc()  分配并初始化函数 calloc() 重新分配内存函数 realloc 释放内存free()
    int *buf1,* buf2, * buf3;
    buf1=(int*)malloc(100*sizeof(int));
    buf2=(int*)calloc(100,sizeof(int));
    buf3=(int*)realloc(buf2,500*sizeof(int));
    free(buf1);
    free(buf3);

  return 0;  
}

  

输出:

 

标签:return,队列,brief,param,QueueCalling,Queue,int,Calling
From: https://www.cnblogs.com/geovindu/p/17774699.html

相关文章

  • c# Queue 队列的基本使用
    C#中的 Queue 是一种基于链表的先进先出(FIFO)数据结构。以下是一个简单的 Queue 实例:///<summary>///普通队列///</summary>publicvoidQueueShow(){//创建一个QueueQueue<string>queue=newQu......
  • Java AbstractQueuedSynchronizer
    目录前言CLH锁AQS框架AQS核心思想AQS的同步状态AQS对资源的共享方式AQS的重要方法AQS的数据结构NodeConditionObjectConditionConditionObjectAQS源码分析核心方法acquire方法addWaiteracquireQueuereleaseAbstractQueuedSynchronizer总结前言Java中的大部分同步类,如L......
  • 队列queue
    队列queue(包含头文件queue)首先说说什么是queue,queue就像是一根管子,数据可以从管子尾部进入,然后从头部出来,不能倒车从尾部出来,并且数据只能从尾部进入,不能从头部进入1.队列的定义queue<队列内输入的数据类型,队列的容器类型>变量名;queue<int>s;//创建一个类型为int变量名......
  • Go - Creating Queues
    Problem: Youwanttocreateaqueuedatastructure.Solution: Wrapastructaroundaslice.Createqueuefunctionsonthestruct. Aqueueisafirst-in-first-out(FIFO)orderedlist.Youaddelementsatthebackofthequeueandgetelementsatt......
  • Java 队列Queue的一些基本操作与概念!!!!!!!!
    首先Java中的队列(Queue)是一种先进先出的数据结构。其中常见的一些基本操作与方法,包括:1、创建队列对象。例如:ArrayDeque、LinkedList等。2、入队操作。将元素添加到队列的末尾处,使用offer()方法。3、出队操作。从队列的头部移除并返回元素,使用poll()方法。......
  • python queue join task_done的概念及实例解析
    一概念Queue.task_done()在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号Queue.join()实际上意味着等到队列为空,再执行别的操作。 二实例源码一importthreadingimportqueueimporttime#创建队列,用于存储数据q=queue.Qu......
  • springAMQP-Work Queue 工作队列(一个队列绑定多个消费者)
         ......
  • diskqueue的元数据文件,数据文件,启动入口,元数据文件读写和保存
     nsq中diskqueue是nsq消息持久化的核心,内容较多,一共分为多篇1.diskqueue是什么,为什么需要它,整体架构图,对外接口2.diskqueue的元数据文件,数据文件,启动入口,元数据文件读写及保存3.diskqueue的数据定义,运转核心ioloop()源码详解4. diskqueue怎么写入消息,怎么对外发送消息上一篇博......
  • 【UVA 12100】Printer Queue 题解(队列+优先队列)
    计算机科学学生会中唯一的打印机正经历着极其繁重的工作量。有时,打印机队列中有100个作业,您可能需要等待数小时才能获得一页输出。由于某些作业比其他作业更重要,黑客将军为打印作业队列发明并实现了一个简单的优先级系统。现在,为每个作业分配1到9之间的优先级(9是最高优先级,1是最低......
  • diskqueue的数据定义,运转核心ioloop()源码详解
     nsq中diskqueue是nsq消息持久化的核心,内容较多,一共分为多篇1.diskqueue是什么,为什么需要它,整体架构图,对外接口2.diskqueue的元数据文件,数据文件,启动入口,元数据文件读写及保存3.diskqueue的数据定义,运转核心ioloop()源码详解4. diskqueue怎么写入消息,怎么对外发送消息前面一篇......