1 循环数组队列

1.1 队列定义

/** loop_queue.h**  Created on: Mar 2, 2022*      Author: xhome.*/#ifndef OTHER_TASK_LOOP_QUEUE_H_
#define OTHER_TASK_LOOP_QUEUE_H_#include <stdio.h>#define  DATA_LEN   512typedef struct {float data[DATA_LEN];int front;int rear;int capacity;
}loop_queue_t;void init_loop_queue(loop_queue_t *queue, int capacity);
int full_loop_queue(loop_queue_t *queue);
int empty_loop_queue(loop_queue_t *queue);
int enter_loop_queue(loop_queue_t *queue, float dat);
int out_loop_queue(loop_queue_t *queue, float *dat);
int get_loop_queue_average(loop_queue_t * queue, float * avg);
int get_queue_rate(loop_queue_t * queue,float coef, float * rate);
int show_loop_queue(loop_queue_t * queue);#endif /* OTHER_TASK_LOOP_QUEUE_H_ */

1.2 循环队列实现

/** loop_queue.c**  Created on: Mar 2, 2022*      Author: xhome.*/#include <stdio.h>
#include "loop_queue.h"/*** capacity: The number of stored elements in the queue.*/
void init_loop_queue(loop_queue_t *queue, int capacity)
{if((capacity > (DATA_LEN-1)) || (capacity < 0)){queue->capacity = DATA_LEN-1;}else{queue->capacity = capacity+1;}queue->front = 0;queue->rear = 0;return;
}int full_loop_queue(loop_queue_t *queue)
{if(queue->front == (queue->rear+1)%(queue->capacity)){return 1;}else{return 0;}
}int empty_loop_queue(loop_queue_t *queue)
{if(queue->front == queue->rear){return 1;}else{return 0;}
}int enter_loop_queue(loop_queue_t *queue, float dat)
{if(full_loop_queue(queue) == 1){return 1;}else{queue->data[queue->rear] = dat;queue->rear = (queue->rear+1)%(queue->capacity);}return 0;
}int out_loop_queue(loop_queue_t *queue, float *dat)
{if(empty_loop_queue(queue)){return 1;}else{*dat = queue->data[queue->front];queue->front = (queue->front+1)%(queue->capacity);}return 0;
}int get_loop_queue_average(loop_queue_t * queue,float * avg)
{int index = queue->front;float sum = 0;for(int i = 0; i < (queue->capacity-1); i++){sum += queue->data[index];if(index == queue->rear){break;}index = (index+1)%queue->capacity;}*avg = sum/(queue->capacity-1);return 0;
}/*** Gets the rate of change of elements in the queue.*/
int get_queue_rate(loop_queue_t * queue,float coef, float * rate)
{float first = queue->data[queue->front];float last = queue->data[queue->rear];*rate = coef*(last - first);return 0;
}int show_loop_queue(loop_queue_t * queue)
{int index = queue->front;for(int i = 0; i < queue->capacity-1; i++){printf("%0.2f ", queue->data[index]);if(index == queue->rear){break;}index = (index+1)%queue->capacity;}putchar(10);return 0;
}int loop_queue_size(loop_queue_t * queue)
{return (queue->rear - queue->front + queue->capacity)%(queue->capacity);
}

1.3 main函数调用测试

#include<stdio.h>
#include "loop_queue.h"int main()
{loop_queue_t queue;float avg;float data;init_loop_queue(&queue, 10);for(int i = 0; i < 20; i++){enter_loop_queue(&queue, i);}show_loop_queue(&queue);get_loop_queue_average(&queue, &avg);printf("avg:%0.3f \n", avg);for(int i = 10; i < 20; i++){out_loop_queue(&queue, &data);enter_loop_queue(&queue, i);show_loop_queue(&queue);get_loop_queue_average(&queue, &avg);printf("avg:%0.3f \n", avg);}return 0;
}

1.4 输出结果

13004.循环数组队列(C语言)相关推荐

  1. 循环数组队列(模拟北饭三的旋转火窝)

    package six; /**1.循环数组(模拟北饭三的旋转火窝)设置缓冲区的大小是4,即数组length=4,为了让每一种情况出现的可能性大点.为了构建逻辑循环数组,下标取模.在数组中有一个hea ...

  2. 循环数组函数c语言,C语言练习题2(分支结构循环结构数组函数2009-2012二级真题)..doc...

    C语言练习题2(分支结构循环结构数组函数2009-2012二级真题). C语言练习题(二) 一 选择题 1.有以下程序 #include void main() { int a: canf(" ...

  3. 【C++算法与数据结构学习笔记------用循环数组实现队列】

    照王晓东<数据结构>(C++语言版)上打的,以备留用. 1 #include <iostream> 2 using namespace std; 3 template<t ...

  4. 循环队列–C语言实现–数据结构

    循环队列–C语言实现–数据结构 目录 循环队列C语言实现数据结构 目录 一 要求 二 循环队列 三 循环队列的算法设计 1 建立循环队列 2 置空队列 3 入队 4 出队 5 打印队 四 程序 1 程 ...

  5. 字符串队列c语言,C语言实现循环队列(队列可存储字符串)

    项目原因,需要写一个队列来存储串口实时输出的字符串.看了网上很多博文和一些数据结构的数据,给的例子都是实现对单个数字或者字符的队列操作,并没有实现在队列中存储字符串.这里分享一种可以实现的方法. 关于 ...

  6. LeetCode622循环队列C语言实现

    LeetCode622循环队列C语言实现 c语言一般是10表示true false,所以有一点点不习惯. 这道题需要注意的点.开始的时候front=1,back=0. 这样enqueue和dequeu ...

  7. c语言循环与数组训练题,C语言循环数组练习题解读.doc

    循环数组练习题 一.选择题 1.for(i=0;i<10;i++); 结束后, i 的值是: B A9B10C11D12 2.下面程序的循环次数是:D int k=0; while(k<1 ...

  8. 如何建立队列c语言_什么是优先队列

    前言 我们之前已经介绍过队列-C语言实现,它们是先入先出的,这很容易用平常的排队来理解.但是如果这个队列要支持有紧急情况的人先出队呢?原先那种队列就不再适用了,我们需要使用本文所提到的特殊队列--优先 ...

  9. python变量/分支/循环/数组/列表/元组/序列

    最近比较流行python,于是我这种从不赶潮流的人也决定跟一把潮流.工作原因学习时间有限,好容易挤着时间看了一部分网上的视频,却被劝说没什么用处,我们就是靠java吃饭的.当然多学一种语言也不会有什么 ...

最新文章

  1. windows下命令行终端使用rz上传文件参数详解
  2. Hadoop系统架构
  3. java设计模式之UML②类图讲解
  4. _UICreateCGImageFromIOSurface 使用API
  5. 基于华为云CSE微服务接口兼容常见问题
  6. java next_permutation_[LeetCode-JAVA] Next Permutation
  7. pytorch 中Tensor.uniform_代替numpy.random.uniform/ permute函数 /torch.mm()和torch.matmul()
  8. Cocos2dx 链接Socket服务器
  9. linux 内核移植(七)――rest_init函数分析
  10. u盘装服务器系统还原c盘失败,云骑士一键重装系统win10还原c盘失败怎么办
  11. WebStorm和VSCode配置
  12. thinkpadt410接口介绍_ThinkPadT410全程拆解
  13. 做手机APP测试,包括哪些测试要点?
  14. 苹果屏蔽更新描述文件_iPhone|IOS10-IOS12屏蔽系统更新描述文件|去除设置①小红点教程...
  15. endnote找不到国标_实验差距惊人!揭秘雅迪高于新国标的品质标准测试
  16. IEEE 802.2 LLC协议
  17. Jenkins分布式集群设计方案
  18. Android中一个app启动另一个app的指定activity
  19. python的split函数作用_spilt函数 详解 for Python
  20. 开源图像数据集管理工具fiftyone使用

热门文章

  1. Qt的工程文件讲解 .pro
  2. Evaluation or Assessment
  3. java 抛出空指针_java - Java ServerSocket抛出空指针异常 - 堆栈内存溢出
  4. android 7.0 黑屏,Android app启动是出现白屏或者黑屏如何解决?
  5. SpringCloud Gateway 服务网关,过滤器
  6. mysql拉数据到本地_从mysql中dump数据到本地
  7. 定位插件_谷歌官方发布了一款全新超实用Chrome插件,支持国内使用!
  8. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
  9. Mouse Event (Java AWT)
  10. 推荐一些C#相关的网站、资源和书籍