⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queue.c.svn-base

📁 AVR单片机下
💻 SVN-BASE
字号:
/*                ****ROBOCON 2009 | BUPT TEAM*******
 * ------------------------------------------------------------------------
 * FileName   : queue.c
 * Version    : 1.1
 * Brief      : 循环队
 * Code by    : Leaf
 * Date       : 04-07 2009
 * Dependence : None
 * Parameters : Q_DATA_TYPE, Q_SIZE_TYPE
 * Note       : 未使用动态分配
 *
 *
 * ------------------------------------------------------------------------
 */

#include "lib_bupt.h"

#ifdef QUEUE_H_INCLUDED

/*初始化队,未使用动态分配*/
void qInit(Queue *q, Q_DATA_TYPE *buf, Q_SIZE_TYPE bufsize)
{
   q->buf      = buf;
   q->capacity = bufsize;
   q->size     = 0;
   q->front    = 0;
   q->back     = 0;
}

/*获取队大小*/
inline Q_SIZE_TYPE qSize(const Queue *q){
	return q->size;
}

/*队是否满*/
inline BOOL qFull(const Queue *q)
{
   return(q->size >= q->capacity);
}

/*队是否空*/
inline BOOL qEmpty(const Queue *q)
{
   return(q->size == 0);
}

/*入队*/
void qPush(Queue *q, Q_DATA_TYPE d)
{
   q->buf[q->back] = d;
   ++ (q->back);
   ++ (q->size);
   if(q->back >= q->capacity)
   {
      q->back = 0;
   }
   if(q->size > q->capacity){
	   q->size = q->capacity;
   }
}

/*出队*/
Q_DATA_TYPE qPop(Queue *q)
{
   Q_DATA_TYPE d;
   d = q->buf[q->front];
   ++ (q->front);
   -- (q->size);
   if(q->front >= q->capacity)
   {
      q->front = 0;
   }
   return(d);
}

/*查看队首数据,而不让它出队*/
Q_DATA_TYPE qFront(const Queue *q){
	return q->buf[q->front];
}

/*将队队中的全部数据放到buf中*/
Q_SIZE_TYPE qFlush(Queue *q, Q_DATA_TYPE *buf){
	Q_SIZE_TYPE i = 0;
	while(!qEmpty(q)){
		buf[i] = qPop(q);
		++ i;
	}
	return i;
}

/*重置队的游标*/
void qReset(Queue *q){
	q->size = 0;
	q->back = 0;
	q->front = 0;
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -