c: Queue Calling in windows and Ubuntu

 windows:

/**
 * *****************************************************************************
 * @file        TakeNumber.h
 * @brief       排队等号  window
 * @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);      
    }
}

  

调用方法1:

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






int main()
{

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

    QueueCalling *queue1;
    
    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;  
}

  

调用方法2:

 

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






int main()
{

    printf("hello c world \n");
    printf("你好,中国\n");
    /*
    textbackgroud(0);
    clrscr();
    for(int i=1;i<8;i++)
    {
        window(10+i*5,5+i,30+i*5,15+i);
        textbacktgroud(i);
        clrscr();
    }
    gettch();*/


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

}

  

输出:

 

 

 

 

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;
    }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;
}

  

输出:

 

  

 

 

 还是官方下载安装,不需要在Ubuntu 软件下安装,有时有BUG。

sudo apt install gdebi
sudo apt install code.deb

 

tasks.json:

{
  
    // See https://go.microsoft.com/fwlink/?LinkId=733558     
    // for the documentation about the tasks.json format     
    "version": "2.0.0",     
    "tasks": [     
    {     
    "label": "build",     
    "type": "shell",     
    "command": "gcc",  //C++   using   g++     
    "args": [
        "-g", 
        //"${file}", 
        "${workspaceFolder}/*.c",
        "-std=c17", 
        "-o", 
        "${fileBasenameNoExtension}.out"]
     
    }     
    ]     
   }

  

Remote - SSH
Remote - SSH: Editing Configuration
Remote Development

远程插件

 

posted @ 2023-10-19 14:47  ®Geovin Du Dream Park™  阅读(18)  评论(0编辑  收藏  举报