/*
*@author jylou
*@data 2020.05.28
*@brief 文件主要是实现对队列的实现,主要是实现历史数据放在队列里面,4k缓存从队列里面不停的取数据,主要是防止存储的时间不连续问题
*/
#include "Queue.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
struct Queue queue;
/*
*@author jylou
*@data 2020.05.28
*@brief 队列初始化
*/
void QueueInit(struct Queue* queue)
{
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
}
/*
*@author jylou
*@data 2020.05.28
*@brief 判断队列是否为空
*/
int QueueEmpty(struct Queue* queue)
{
return (queue->size == 0);
}
/*
*@author jylou
*@data 2020.05.28
*@brief 函数主要是实现 入队列
*/
void QueuePush(struct Queue* queue, const QueueDataStruct data)
{
static struct Link* node;
node = (struct Link*)malloc(sizeof(struct Link));
assert(node != NULL);
node->data = data;
node->next = NULL;
if(QueueEmpty(queue))
{
queue->front = node;
queue->rear = node;
}
else
{
queue->rear->next = node;
queue->rear = node;
}
++queue->size;
}
/*
*@author jylou
*@data 2020.05.28
*@brief 函数主要是弹出队列
*/
int QueuePop(struct Queue* queue, QueueDataStruct* data)
{
if (QueueEmpty(queue))
{
return 0;
}
struct Link* tmp = queue->front;
*data = queue->front->data;
queue->front = queue->front->next;
free(tmp);
--queue->size;
return 1;
}
/*
*@author jylou
*@data 2020.05.28
*@brief 函数主要是实现销毁队列
*/
void QueueDestroy(struct Queue* queue)
{
struct Link* tmp;
while(queue->front)
{
tmp = queue->front;
queue->front = queue->front->next;
free(tmp);
--queue->size;
}
}
/*
*@author jylou
*@data 2020.05.28
*@brief 函数主要是堆数据过多销毁
*/
void ErrorQueueDestroy(void)
{
if(queue.size >STACKSIZE) //堆存放数据大小 直接销毁
{
QueueDestroy(&queue);
}
}