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
远程插件
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)