循环队列
时间:2022-04-22
本文章向大家介绍循环队列,主要内容包括数据结构、入队操作、出队操作、示例代码、运行结果、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
循环队列类似栈,但是有两个口,一个专门用来入队,一个专门用来出队。由于入队出队不在一个端口,因此如果不适用循环队列,随着队列的使用,存储空间马上就被耗光了。在循环队列中,一个主要的知识点,就是如何判断队列为空,或者队列满。
这里主要有两个方法:
1 设置一个标记位,初始时,队列为空,我们设置flag=0;随着数据的使用,如果队满,设置flag=1;
2 使用一个空的数据位,这样rear指针永远也不能追上front指针。当front==rear时,队列即为空;当(rear-front)%SIZE==SIZE时,队列为满
数据结构
typedef struct Queue{
int data[MAXSIZE];
int front;
int rear;
}Queue;
入队操作
int inQueue(Queue *q,int num){
if((q->rear+1)%MAXSIZE == q->front)
return 0;
q->data[q->rear] = num;
q->rear = (q->rear+1)%MAXSIZE;
return 1;
}
出队操作
int outQueue(Queue *q,int *tar){
if(q->front == q->rear)
return 0;
*tar = q->data[q->front];
q->front = (q->front+1)%MAXSIZE;
return 1;
}
示例代码
1 #include <stdio.h>
2 #include <stdlib.h>
3 #define MAXSIZE 10
4
5 typedef struct Queue{
6 int data[MAXSIZE];
7 int front;
8 int rear;
9 }Queue;
10
11 void initQueue(Queue *q,int n);
12 void showQueue(Queue *q);
13 int getLength(Queue *q);
14 int inQueue(Queue *q,int num);
15 int outQueue(Queue *q,int *tar);
16
17 int main()
18 {
19 Queue *q = (Queue *)malloc(sizeof(Queue));
20 initQueue(q,3);
21 showQueue(q);
22
23 if(inQueue(q,9))
24 showQueue(q);
25
26 int *tar = (int *)malloc(sizeof(int));
27 if(outQueue(q,tar))
28 printf("the number %d out Queuen",*tar);
29 showQueue(q);
30
31 if(outQueue(q,tar))
32 printf("the number %d out Queuen",*tar);
33 showQueue(q);
34
35 if(inQueue(q,110))
36 showQueue(q);
37
38 if(outQueue(q,tar))
39 printf("the number %d out Queuen",*tar);
40 showQueue(q);
41
42 if(outQueue(q,tar))
43 printf("the number %d out Queuen",*tar);
44 showQueue(q);
45
46 if(outQueue(q,tar))
47 printf("the number %d out Queuen",*tar);
48 showQueue(q);
49
50 free(tar);
51 free(q);
52 return 0;
53 }
54
55 void initQueue(Queue *q,int n){
56 int i;
57 q->front=0;
58 q->rear =0;
59 for(i=0;i<n;i++){
60 q->data[q->rear]=2*i+1;
61 q->rear++;
62 }
63 }
64 void showQueue(Queue *q){
65 int i;
66 int len=getLength(q);
67 printf("front-");
68 for(i=0;i<len;i++){
69 if(q->front+i<MAXSIZE)
70 printf("%d-",q->data[q->front+i]);
71 else
72 printf("%d-",q->data[q->front+i-MAXSIZE]);
73 }
74 printf("rearn");
75 }
76 int getLength(Queue *q){
77 return (q->rear-q->front+MAXSIZE)%MAXSIZE;
78 }
79 int inQueue(Queue *q,int num){
80 if((q->rear+1)%MAXSIZE == q->front)
81 return 0;
82 q->data[q->rear] = num;
83 q->rear = (q->rear+1)%MAXSIZE;
84 return 1;
85 }
86 int outQueue(Queue *q,int *tar){
87 if(q->front == q->rear)
88 return 0;
89 *tar = q->data[q->front];
90 q->front = (q->front+1)%MAXSIZE;
91 return 1;
92 }
运行结果
- 四个问答让你秒懂区块链原理及应用
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
- 【机器学习实战】第11章 使用 Apriori 算法进行关联分析
- 【Scikit-Learn 中文文档】概率校准 - 监督学习 - 用户指南 | ApacheCN
- ASP.NET MVC路由扩展:链接和URL的生成
- .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?
- C+实现神经网络之贰—前向传播和反向传播
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[上]:采用管道处理请求
- 2017奇葩机器人大盘点:一言不合让你变瞎
- 【机器学习实战】第14章 利用SVD简化数据
- 异步数据存储声明
- 区块链学堂——公有链、私有链、联盟链、侧链、互联链
- 人工智能将让我们更擅长辩论
- ASP.NET路由系统实现原理:HttpHandler的动态映射
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP抽象类与接口的区别详解
- PDO::exec讲解
- 使用keras框架cnn+ctc_loss识别不定长字符图片操作
- PHP实现的策略模式示例
- 浅谈pytorch中torch.max和F.softmax函数的维度解释
- 用PHP的反射实现委托模式的讲解
- PHP时间函数使用详解
- python批量处理多DNS多域名的nslookup解析实现
- PHP单例模式数据库连接类与页面静态化实现方法
- pytorch 常用函数 max ,eq说明
- 解析python 中/ 和 % 和 //(地板除)
- python右对齐的实例方法
- PHP的PDO预处理语句与存储过程
- PHP工厂模式的日常使用
- 使用ucenter实现多站点同步登录的讲解