现在的位置: 首页 > 综合 > 正文

为一个串口软件写的简单的循环队列 需改进

2013年09月07日 ⁄ 综合 ⁄ 共 1313字 ⁄ 字号 评论关闭

// 运用计数器来判断队列是否满
typedef struct  _T_RevData
{
 float a;
 float b;
 float c;
 float d;
 float e;
 float f;
 float g;
 float h;
 float i;
 float j;
}T_RevData;
typedef struct 
{
 int front;
 int rear;
 int count;
 T_RevData data[MAXSIZE];
}CirQueue;

// 置空队
void InitQueue(CirQueue *Q)
{
 Q->front = Q->rear = 0;
 Q->count = 0;
}
// 判断队空,为空返回真,非空返回false
bool QueueEmpty(CirQueue *Q)
{
 if (Q->count == 0)
 {
  return true;
 }
 else
   return false;
 
}
// 判断队满,满的话为真
bool QueueFull(CirQueue *Q)
{
 if (Q->count == MAXSIZE)
 {
  return true;
 }
 else
   return false;
}

// 入队
bool EnterQueue(CirQueue *Q, T_RevData x)
{
 if (QueueFull(Q))
 {
  return false;
 }
 Q->count++;
 Q->data[Q->rear] = x;
 Q->rear= (Q->rear + 1) % MAXSIZE; // 循环意义下将尾指针加1
 return true;
}

// 出队,出之前先要判断队列是否为空
T_RevData DeQueue(CirQueue *Q)
{
 T_RevData tTemp;
 tTemp = Q->data[Q->front];
 Q->count--;
 Q->front = (Q->front + 1) % MAXSIZE; // 循环意义下的头指针加1
 return tTemp;
}

// 取队头元素, 之前也要先判断队列是否为空
T_RevData QueueFront(CirQueue *Q)
{
 return Q->data[Q->front];

}

 

// test代码

int main()
{

 T_RevData tRevData1, tRevData2;
 tRevData1.a = 123.4567;
 tRevData1.b = 123.4567;
 tRevData1.c = 123.4567;
 tRevData1.d = 123.4567;
 tRevData1.e = 123.4567;
 tRevData1.f = 123.4567;
 tRevData1.g = 123.4567;
 tRevData1.h = 123.4567;
 tRevData1.i = 123.4567;
 tRevData1.j = 123.4567;
//
 tRevData2 = tRevData1;

 // 队列运用
 CirQueue tTestQueue;
 InitQueue(&tTestQueue);
 for (int i = 0; i < 10; i++)
 {
  EnterQueue(&tTestQueue, tRevData1);
 }

 tRevData2 = DeQueue(&tTestQueue);

 

}

【上篇】
【下篇】

抱歉!评论已关闭.