队列 :队列是一种先进先出的数据结构。

比如说

排队买票,

有一个售票口,最多能排30人,那么最大存储空间就是30人,

每当有1个新人过来排队,就会站在队尾,这就叫入队,

每当有1个人买到票了,就会离开,就叫出队。

生活中,最前面1个人买完票后,队伍中剩下的每1个人都会向前走1位,

对于计算机来说,每个人动一下意味着要执行更多的代码,

如果卖票的人卖完第1个 ,第一个人就离开,

售票员就走向第2个,再走向第3个,

直到1队队伍尾走完,再进1队。售票员就重头开始走就会更方便。

========================================================

环形队列是这样的,不用每个人都向前移动1位,

在一个排满的队列中,当售票员卖了第1张票时,不要每个人向前移动。

因为1号位空出来了,下一个排队的人就站在1号位置上,队尾+1变成2,

售票员向前走了一步,再卖1张,

2号位置空出来了,下一个排队的人就到2号位置上,

队尾+1变成3,依次类推,

售票员卖到队伍尾部后又会重头开始来,依旧是按照1 2 3 的顺序,

就不需要执行更多的代码。

环形队列需要考虑以下内容:

1. 创建队列

(最大存储量,队列长度,队头下标,队尾下标,数组记录队伍每个下标的内容)

2. 删除队列,不需要的时候从内存中清除。

3. 队列为空判断,不能出队操作了。

4. 队列为满判断,不能入队操作了。

5. 遍历队列元素,验证队列内容是否按照要求来。

取余数就是为了,队伍再次从头开始排队。

代码就按照以上的需求进行建立

#define MAXSIZE 5

#include

// 队列包含的信息

typedef struct queue

{

int *qu; //用来存储全部的队列中的元素

int head; //队列头

int tail; //队尾

int qlength; //队列长度

int maxsize; //用来记录队列的最大容量

}QUEUE;

// 初始化队列

QUEUE *CreateQueue ( int maxsize)

{

printf("[%lu]",sizeof(QUEUE));

QUEUE *q= (QUEUE *)malloc(sizeof(QUEUE));

if (q == NULL) {

printf("Memory alloc failure\n");

exit(-1);

}

q->qu=(int *)malloc(sizeof(int)*maxsize);

if(NULL==q->qu)

{

printf("Memory allocation failure");

exit(-1); //退出程序

}

//分配完空间后,1开始队头队尾都在一起,因为没人,都为0长度也为0,

q->head = 0;

q->tail = 0;

q->qlength = 0;

q->maxsize = maxsize;

return q;

}

// 判断空队列,长度为0则为空

bool Empty (QUEUE *q)

{

return q->qlength == 0 ? true : false;

}

// 判断满队列,长度=最大容量为满

bool Full (QUEUE *q)

{

return q->qlength == q->maxsize ? true : false;

}

//入队

bool Enqueue (QUEUE *q , int num)

{

// 队列不满才插入

if (Full(q)) {

printf("队列满了,插入失败\n");

return false;

}else{

//给队伍最尾添加赋值。

q->qu[q->tail] = num;

//队尾向后移动一位,如果超过最大值,则从0开始,变成队尾

q->tail = (q->tail +1)%q->maxsize;

//队伍长度+1

q->qlength ++;

return true;

}

}

// 出队

bool Dequeue (QUEUE *q)

{

// 队列有元素才能够删除

if (Empty(q)) {

printf("队列为空,删除失败\n");

return false;

}else{

//队头向后移动一位 超过最大值又重新 从0 开始计算

q->head = (q->head +1)%q->maxsize;

// 队伍长度-1

q->qlength -- ;

return true;

}

}

// 遍历队列元素

void Traverse(QUEUE *q)

{

// 在队列长度范围内 打印队列从队列头 到队列尾的元素

for (int i=0 ; iqlength; i++) {

printf("%d ", q->qu[(q->head+i)%q->maxsize]);

}

printf("\n");

}

int main(int argc, const char * argv[]) {

// insert code here...

std::cout << "Hello, World!\n";

QUEUE Q =*CreateQueue(MAXSIZE);

if ( Empty(&Q)) {

printf("空队列\n");

};

Enqueue(&Q, 10);

Enqueue(&Q, 12);

Enqueue(&Q, 14);

if ( Empty(&Q)) {

printf("空队列\n");

};

Enqueue(&Q, 16);

Enqueue(&Q, 18);

Dequeue(&Q);

Enqueue(&Q, 20);

if (Full(&Q)) {

printf("满队列\n");

}

Traverse(&Q);

return 0;

}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

126

127

128

129

130

131

132

133

134

135

136

137

运行结果

Hello, World!

[24]空队列

满队列

12 14 16 18 20

Program ended with exit code: 01

2

3

4

5

c语言程序结构环形队列入队,C语言 环形队列相关推荐

  1. 单片机c语言程序结构,科学网—单片机C语言-程序结构 - 李飞的博文

    单片机C语言-程序结构 已有 651 次阅读 2011-3-30 22:29 |系统分类:科研笔记 先来复杂说说C言语的标识符和关键字. 标识符是用来标识源程序中某个对象的名字的, 可以写做" ...

  2. C语言程序结构的特点

    C语言程序结构的特点 C语言程序结构的特点 C语言程序结构的特点 1.一个程序由一个或多个源程序文件组成: 2.函数是C程序的主要组成部分 3.函数的组成 4.程序总是从main函数开始执行 5. 在 ...

  3. [Go语言入门] 02 Go语言程序结构

    文章目录 02 Go语言程序结构 2.1 Go语言的一些基本概念 2.2 go源文件的代码结构 2.3 Go项目的基本文件结构 2.4 实战:创建一个模块 2.5 实战:从另一个模块调用刚创建的模块 ...

  4. c语言程序第一章编程,c语言程序的设计第一章 C语言编程入门.ppt

    c语言程序的设计第一章 C语言编程入门 第1章 C语言编程入门 本章是本书的入门篇,专为初学者熟悉编程过程.掌握程序结构而准备的. 本章学习目标 ? 1)? 能够通过模仿与改变来构造带有测试函数的C语 ...

  5. 统计字符 c语言程序,统计字符个数的C语言程序.doc

    统计字符个数的C语言程序.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  6. C语言入门教程|| C语言 程序结构|| C语言 基本语法

    在我们学习 C 语言的基本构建块之前,让我们先来看看一个最小的 C 程序结构,在接下来的章节中可以以此作为参考. C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 ...

  7. JAVA学习笔记 03 - JAVA语言程序结构

    本文是Java基础课程的第三课.计算机语言的程序结构无外乎顺序结构.分支结构.循环结构,本文主要介绍Java语言中这些程序结构是如何实现的 文章目录 一.程序结构 二.分支结构 1.单分支if语句 2 ...

  8. 简述单片机c51语言程序结构,单片机C51程序结构

    <单片机C51程序结构>由会员分享,可在线阅读,更多相关<单片机C51程序结构(14页珍藏版)>请在人人文库网上搜索. 1.1 C51程序流程与控制C语言是一种结构化的编程语言 ...

  9. 杨辉三角c语言程序jian,杨辉三角C语言程序队列实现(带源码+解析)

    杨辉三角,即如下 通过学习数据结构,解决杨辉三角,可以使用循环来实现:在循环队列中依次存放第 i-1 行上的元素,然后逐个出队并打印,同时生成第 i 行上的元素并入队. 如果要求计算并输出杨辉三角前 ...

最新文章

  1. 【Flask】request请求
  2. android如何使用ios14组件,ios14小组件怎么添加 苹果ios14小组件添加使用教程
  3. 详细推导PCA算法(包括算法推导必备的知识)
  4. rabbitmq-消息追踪rabbitmq_tracing
  5. 百度SEO站群织梦dedecms自定义多条件筛选插件源码
  6. 彻底理解SESSION
  7. css-布局1-基本属性
  8. 【JOURNAL】《题虾壶》
  9. Centos7 tomcat优化
  10. java默认字符串排序规则_Java 字符串排序--------请对一组字符串进行排序,字符串由大小写字母和数字组成,需要满足一下比较规则...
  11. taskkill java进程_windows - Taskkill / f不会杀死进程
  12. 零基础学模拟电路--3.同相放大器、反相放大器、加法器、减法器、积分器、微分器
  13. 【使用TIFF库对tif图片的读写】
  14. 小米机顶盒安装第三方软件流程
  15. java操作zip压缩文件加密码和解密工具类
  16. 射频(RF)基本理论:定义、特性、调制、扩频
  17. “如何实现高效的应用交付”鲁班会开发者训练营厦门站进行时
  18. 区块链工程师工资小调查,工资最高的居然是杭州
  19. 爬取我爱我家租房信息时 问题总结(付代码)
  20. 时间序列分析(1)-移动平均法

热门文章

  1. 枚举类中Enum的values方法
  2. 在命令行下用winrar打包文件夹
  3. python google-glog功能介绍
  4. Shader smoothstep实现线条渐变色
  5. Nginx负载均衡配置教程-Linux
  6. centos7挂载exFAT硬盘(实测最好)
  7. Laya动画,整图动画,序列图动画,时间轴动画,龙骨动画
  8. DirectX 3D纹理
  9. 运营商MCC+MNC
  10. 初探Java Nashorn脚本引擎