#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "board.h"
//队列设计
struct _node_
{
rx_msg_t rx_msg;
struct _node_ *next;
};
typedef struct
{
struct _node_ *front;
struct _node_ *rear;
}ListQueue;
//队列操作
int queue_init(ListQueue **p)
{
struct _node_ *head;
//创建一个头结点
head = (struct _node_ *)malloc(sizeof(struct _node_));
head->next = NULL;
//让队列的头尾都指向它
*p = (ListQueue *)malloc(sizeof(ListQueue));
(*p)->front = (*p)->rear = head;
return 0;
}
int is_empty_queue(ListQueue *p)
{
if(p->front->next == NULL && p->rear->next == NULL)
return 1;
else
return 0;
}
int push_queue(ListQueue *p, rx_msg_t data) //入队
{
struct _node_ *temp;
//分配结点
temp = (struct _node_ *)malloc(sizeof(struct _node_));
temp->rx_msg = data;
temp->next = NULL;
//尾部插入结点
p->rear->next = temp;
//更新尾部指针
p->rear = temp;
return 0;
}
rx_msg_t pop_queue(ListQueue *p)
//出队
{
struct _node_ *temp;
rx_msg_t data;
if(is_empty_queue(p))
{
printf("Error!,queue is empty...\n");
return;
}
//指向头结点的下一个结点
temp = p->front->next;
data = temp->rx_msg;
//删除结点
p->front->next = temp->next;
free(temp);
temp = NULL;
//最后一个结点处理
if(p->front->next == NULL)
p->rear = p->front;
return data;
}