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(涂聚文)
浙公网安备 33010602011771号