爲一個串口軟件寫的簡單的循環隊列 需改進

// 運用計數器來判斷隊列是否滿
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);

 

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章