QUEUE接口
数据结构定义
typedef void* PLIST_QUEUE;
typedef struct __queueNode
{
struct __queueNode *pNext;
int data;
}ST_QUEUE_NODE;
typedef struct __listQueue
{
ST_QUEUE_NODE header;
ST_QUEUE_NODE *pRear;
int size;
}LIST_ST_QUEUE;
- 1、创建并初始化队列
PLIST_QUEUE init_list_queue(void)
{
LIST_ST_QUEUE *pListQ = malloc(sizeof(LIST_ST_QUEUE));
if(NULL == pListQ)
{
return NULL;
}
pListQ->header.pNext = NULL;
pListQ->size = 0;
pListQ->pRear = &pListQ->header;
return pListQ;
}
- 2、加入队列
int push_list_queue(PLIST_QUEUE pListQ, void *pData)
{
ST_QUEUE_NODE *pstQNode = NULL;
LIST_ST_QUEUE *pstListQ = NULL;
if(NULL == pListQ || NULL == pData)
{
return -1;
}
pstQNode = (ST_QUEUE_NODE *)pData;
pstListQ = (LIST_ST_QUEUE *)pListQ;
pstListQ->pRear->pNext = pstQNode;
pstQNode->pNext = NULL;
pstListQ->pRear = pstQNode;
pstListQ->size++;
return 1;
}
- 3、退出队列
int pop_list_queue(PLIST_QUEUE pListQ)
{
LIST_ST_QUEUE *pstListQ = NULL;
ST_QUEUE_NODE *pstQNode = NULL;
if(NULL == pListQ)
{
return -1;
}
pstListQ = (LIST_ST_QUEUE *)pListQ;
if(pstListQ->size == 0)
{
return 0;
}
pstQNode = pstListQ->header.pNext;
if(pstListQ->size == 1)
{
pstListQ->header.pNext = NULL;
pstListQ->pRear = &pstListQ->header;
}
else
{
pstListQ->header.pNext = pstQNode->pNext;
}
pstListQ->size--;
return 1;
}
- 4、获取队列首节点
void *get_list_queue_first_node(PLIST_QUEUE pListQ)
{
LIST_ST_QUEUE *pstListQ = NULL;
if(NULL == pListQ)
{
return NULL;
}
pstListQ = (LIST_ST_QUEUE *)pListQ;
return pstListQ->header.pNext;
}
- 5、获取队列最后的元素
void *get_list_queue_last_node(PLIST_QUEUE pListQ)
{
LIST_ST_QUEUE *pstListQ = NULL;
if(NULL == pListQ)
{
return NULL;
}
pstListQ = (LIST_ST_QUEUE *)pListQ;
return pstListQ->pRear;
}
- 6、获取队列长度
int get_list_queue_size(PLIST_QUEUE pListQ)
{
LIST_ST_QUEUE *pstListQ = NULL;
if(NULL == pListQ)
{
return -1;
}
pstListQ = (LIST_ST_QUEUE *)pListQ;
return pstListQ->size;
}
- 7、释放
void free_list_queue(PLIST_QUEUE pListQ)
{
LIST_ST_QUEUE *pstListQ = NULL;
if(NULL == pListQ)
{
return ;
}
pstListQ = (LIST_ST_QUEUE *)pListQ;
pstListQ->header.pNext = NULL;
pstListQ->pRear = NULL;
pstListQ->size = 0;
free(pListQ);
pListQ = NULL;
}
- 8、遍历打印
void print_list_queue(PLIST_QUEUE pListQ)
{
LIST_ST_QUEUE *pstListQ = NULL;
ST_QUEUE_NODE *pstQNode = NULL;
int size = 0;
if(NULL == pListQ)
{
printf("list queue is null!\n");
return;
}
pstListQ = (LIST_ST_QUEUE *)pListQ;
pstQNode = pstListQ->header.pNext;
size = pstListQ->size;
while(size > 0)
{
printf("list queue node:%d\n", pstQNode->data);
pstQNode = pstQNode->pNext;
size--;
}
}