队列源码

#define QUEUE_SIZE 3		//队列的大小

typedef struct
{
	int Queue[QUEUE_SIZE];	
	int Rd;					//读位置
	int Wr;					//写位置
}QueueType;
static QueueType tQueue;	//定义队列


int QueueIsEmpty();
int QueueIsFull();


/**
* @brief		队列初始化
* @param[in]	*pTmp:队列数据
* @param[out]	NO
* @return		NO
* @note 
*/
void QueueInit(QueueType *pTmp)
{
	memset(&tQueue,0,sizeof(QueueType));
}
/**
* @brief		从队列中读出一个元素
* @param[in]	NO
* @param[out]	*p:读出的元素
* @return		0:OK
				-1:队列已空,读取失败
* @note 
*/
int QueueRd(int *p)
{
	if (QueueIsEmpty()==-1)
	{
		
		tQueue.Rd  =(tQueue.Rd+1)%QUEUE_SIZE;//首尾相接
		*p =tQueue.Queue[tQueue.Rd];
		return 0;
	}
	else
	{
		return -1;
	}
}
/**
* @brief		向队列写入一个元素
* @param[in]	Value:写入的元素
* @param[out]	NO
* @return		0:OK
				-1:队列已满,写入失败
* @note 
*/
int QueueWr(int Value)
{
	if (QueueIsFull()==-1)
	{
		
		tQueue.Wr  =(tQueue.Wr+1)%QUEUE_SIZE;//首尾相接
		tQueue.Queue[tQueue.Wr] =Value;
		return 0;
	}
	else
	{
		return -1;
	}
}
/**
* @brief		判断队列是否是满的
* @param[in]	NO
* @param[out]	NO
* @return		0:队列已满
				-1:队列非满
* @note 
*/
int QueueIsFull()
{
	if (   ((tQueue.Rd==0) && (tQueue.Wr+1==QUEUE_SIZE))
		|| (tQueue.Rd-tQueue.Wr==1)
		)
	{
		return 0;
	}
	else
	{
		return -1;
	}
}
/**
* @brief		判断队列是否是空的
* @param[in]	NO
* @param[out]	NO
* @return		0:队列已空
				-1:队列非空
* @note 
*/
int QueueIsEmpty()
{
	if (tQueue.Rd == tQueue.Wr)
	{
		//已空
		return 0;
	}
	else
	{
		return -1;
	}
}
 
 
void main() 
{
	
	int i=0,tmp,*p;

	p =&tmp;
	QueueInit(&tQueue);

	while(1)
	{
		QueueWr(++i);
		QueueRd(p);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值