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

远程插件

 

posted @   ®Geovin Du Dream Park™  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 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
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示