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

📄 queue.c

📁 Avr单片机半双工模式Usart驱动
💻 C
字号:
/*                ****ROBOCON 2009 | BUPT TEAM*******
 * ------------------------------------------------------------------------
 * FileName   : queue.c
 * Version    : 0.1
 * Brief      : Queue Data Structure
 * Code by    : Leaf
 * Date       : 12-08 2008
 * Dependence : None
 * Parameters : Q_DATA_TYPE, Q_SIZE_TYPE
 * Note       :
 *
 *
 * ------------------------------------------------------------------------
 */

#include "config.h"

#ifdef QUEUE_H_INCLUDED

void q_init(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;
}

BOOL q_full(Queue *q)
{
   return(q->size >= q->capacity);
}

BOOL q_empty(Queue *q)
{
   return(q->size == 0);
}

void q_pushback(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 q_popfront(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_SIZE_TYPE q_flush(Queue *q, Q_DATA_TYPE *buf){
	Q_SIZE_TYPE i = 0;
	while(!q_empty(q)){
		buf[i] = q_popfront(q);
		++ i;
	}
	return i;
}
#endif

⌨️ 快捷键说明

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