c: Queue Calling in windows and Ubuntu
windows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | /** * ***************************************************************************** * @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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | /** * ***************************************************************************** * @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]); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /** * ***************************************************************************** * @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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | /** * ***************************************************************************** * @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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | /** * @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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | /** * @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]); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /** * @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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | /** * @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); } } |
调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | /** * @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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | { // 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(涂聚文)
分类:
Cpp programming
标签:
数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2022-10-19 Python: Bridge Pattern
2022-10-19 Python: Builder Pattern
2011-10-19 Csharp windowform controls clear