欢迎使用CSDN-markdown编辑器
来源:互联网 发布:安卓js css本地打包 编辑:程序博客网 时间:2024/06/15 00:36
循环队列的实现
queue.h:
/*********************************************************************** @file * @brief 循环队列* * @version 2.0* @date 2015-07-18* @author ** Copyright(C) 2015 * All rights reserved.************************************************************************/#ifndef _QUEUE_H_#define _QUEUE_H_/* Includes -----------------------------------------------------------------------*/```#include <stdbool.h>```/* Exported types ---------------------------------------------------------------*/typedef struct{ unsigned char *fifo; //队列缓冲区 unsigned short size; //队列缓冲区的长度(可用长度为size - 1 因为rear要占用一个空间) unsigned short front; //头指针,若队列非空,指向队列头元素 unsigned short rear; //尾指针,若队列非空,指向队列尾元素的下一个位置}Queue_t;/* Exported functions -------------------------------------------------------- */bool InitQueue(Queue_t *Q,unsigned char *DataBuf,unsigned int BufLen);bool QueuePut(Queue_t *Q, unsigned char e);bool QueueGet(Queue_t *Q,unsigned char *Data);void QueueClr(Queue_t *Q);<div class="se-preview-section-delimiter"></div>#endif<div class="se-preview-section-delimiter"></div>
queue.c:
/*********************************************************************** @file * @brief 循环队列实现* * @version 2.0* @date 2015-07-18* @author ** Copyright(C) 2015 * All rights reserved.************************************************************************/<div class="se-preview-section-delimiter"></div>#include "queue.h"<div class="se-preview-section-delimiter"></div>#include <stddef.h><div class="se-preview-section-delimiter"></div>#include <stdbool.h>/*------------------------------------------------------* Function name :InitQueue* Description :构造一个队列* param :Q - 队列控制块* buf - 队列缓冲区* len - 缓冲区长度* reval :true :初始化成功-------------------------------------------------------*/bool InitQueue(Queue_t *Q,unsigned char *buf,unsigned short len){ if(DataBuf == NULL || BufLen == 0)return false; Q->fifo = DataBuf; Q->size = BufLen; Q->front = 0; Q->rear = 0; return true;}/*-----------------------------------------------------* Function name : IsEmpty* Description : 判断队列是否为空* param : none* reval : true 空标志------------------------------------------------------*/bool IsQEmpty(Queue_t *Q){ return (Q->front == Q->rear);}/*-----------------------------------------------------* Function name : IsEmpty* Description : 判断队列是否为满* param : none* reval : true 满标志-----------------------------------------------------*/bool IsQFull(Queue_t *Q){ return ( (Q->rear + 1) % Q->size == Q->front);}/*-----------------------------------------------------* Function name : EnQueue* Description : 在队列中插入一个元素* param : Q.队列控制块 e.待插入的元素* reval : 操作成功:返回Q_OK ------------------------------------------------------*/bool QueuePut(Queue_t *Q, unsigned char e){ if ( IsQFull(Q) ) { return false; } else { Q->fifo[Q->rear] = e;/*数据进队-----------------*/ Q->rear = (Q->rear+1)%Q->size;/*偏移队尾针,并形成循环结构*/ } return true;}/*-----------------------------------------------------* Function name :QueueGet* Description :从队列中移出一个元素* param :Q - 队列控制块* ouput :Data* reval :操作成功:返回true------------------------------------------------------*/bool QueueGet(Queue_t *Q,unsigned char *e){ if( IsQEmpty(Q) )//队列是空的 { return false; } else { *e = Q->fifo[Q->front];/*数据出队----------*/ Q->front = (Q->front+1) % Q->size;/*偏移队首针,并形成循环结构*/ } return true;}/*------------------------------------------------------* Function name : QueueClr* Description : 清空队列* param : Q - 待清空的队列* reval : None------------------------------------------------------*/void QueueClr(Queue_t *Q){ Q->front = Q->rear = 0;}
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- ftp安装
- Spark 2.0技术预览:更容易、更快速、更智能
- w3schools网站的HTML教程之HTML基础
- 136_android布局优化措施
- Linux的目录结构整理
- 欢迎使用CSDN-markdown编辑器
- 在ubuntu下安装vmware tools
- 137_Handler警告解决方法
- 练习三1017
- linux chmod 命令
- hdu5690 快速模幂
- 差分约束系统的粗浅总
- Linux进程间通信——使用信号量
- Python读取JSON数据,并解决字符集不匹配问题