原创 循环队列简单模型

2013-1-18 21:34 1767 7 7 分类: MCU/ 嵌入式

 

#include <stdio.h>
#define MAX_QUE  8
#define EMPTY    0
#define QUE_OK   1
typedef struct
{
    unsigned int udHead;
unsigned int udTail;
unsigned int audBuff[MAX_QUE];
}T_TxQue;
unsigned int gdTxData;
T_TxQue gtTxQue;
 
void SendQue(unsigned int udRxData)
{
if((gtTxQue.udHead + 1) % (MAX_QUE ) == gtTxQue.udTail)  /* 判断队列满 */
{
   printf("队列满,head = %d, tail = %d\n",gtTxQue.udHead ,gtTxQue.udTail);
return;
}
gtTxQue.audBuff[gtTxQue.udHead] = udRxData;
gtTxQue.udHead++;
if(gtTxQue.udHead == MAX_QUE)
{
   gtTxQue.udHead = 0;
}
}
unsigned int ReadTxQue()
{
if(gtTxQue.udHead != gtTxQue.udTail)
{
   gdTxData = gtTxQue.audBuff[gtTxQue.udTail];
gtTxQue.udTail++;
if(gtTxQue.udTail == MAX_QUE)
{
   gtTxQue.udTail = 0;
}
return QUE_OK;
}
else
{
   return EMPTY;
}
}
int main()
{
unsigned int udKeyData;
unsigned int udRtn;
gtTxQue.udHead = 0;
gtTxQue.udTail = 0;
 
while(1)
{
printf("入队数据:");
scanf("%d",&udKeyData);
        if(udKeyData != 20)  /* 不等于20,数据入队,等于20出队,20是随便写的 */
{
   SendQue(udKeyData);
}
else
{
udRtn = ReadTxQue();
if(EMPTY != udRtn)
{
printf("队尾数据:%d\n",gdTxData);
}
else
{
   printf("队列为空\n");
}
}
 
}
}
 

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条