C实现消息队列Queue
发布日期:2021-08-26 09:44:35 浏览次数:7 分类:技术文章

本文共 2557 字,大约阅读时间需要 8 分钟。

hot3.png

/*** @file GM_Queue.h* @brief 采用链表实现,链表的头部为队首, 链表的尾部为队尾, Enqueue在队尾进行操作, Dequeue在队首进行操作* @author * @date * @version */#ifndef _GM_QUEUE_H#define _GM_QUEUE_H#include 
#ifdef __cplusplusextern"C"{#endif /**< __cplusplus */ /** * @brief GM_Queue_Enqueue * * 入队. * @param[in] value * @return int */ int GM_Queue_Enqueue(int value); /** * @brief GM_Queue_Dequeue * * 出队. * @param[out] value * @return int */ int GM_Queue_Dequeue(int* value); /** * @brief GM_Queue_Clear * * 清队. */ void GM_Queue_Clear(); /** * @brief GM_Queue_Length * * 队长. * @return int */ int GM_Queue_Length(); #ifdef __cplusplus}#endif /**< __cplusplus */#endif /**< _GM_QUEUE_H */

 

 

/*** @file GM_Queue.c* @brief * @author * @date * @version */#include "GM_Queue.h"#include 
typedef struct Queue{ int value; struct Queue* next;}Queue_Struct;static Queue_Struct* head = NULL;static Queue_Struct* tail = NULL;static int count = 0;int GM_Queue_Enqueue( int value ){ Queue_Struct* tmp = (Queue_Struct*)malloc(sizeof(Queue_Struct)); if (NULL == tmp) { return -1; } tmp->value = value; tmp->next = NULL; if (NULL == tail) { head = tmp; } else { tail->next = tmp; } tail = tmp; ++count; return 1;}int GM_Queue_Dequeue( int* value ){ Queue_Struct* tmp = NULL; if ((NULL == head) || (NULL == value)) { return -1; } *value = head->value; tmp = head; if (head == tail) { head = NULL; tail = NULL; } else { head = head->next; } free(tmp); tmp = NULL; --count; return 1;}void GM_Queue_Clear(){ int i = 0; int value = 0; while (count > 0) { GM_Queue_Dequeue(&value); }}int GM_Queue_Length(){ return count;}void main(){ int i = 0; int rt = -1; int value = 0; for (i = 0; i < 10; ++i) { rt = GM_Queue_Enqueue(i); printf("ENQUEUE rt=%d: value=%d\n", rt, i); } printf("COUNT=%d\n", GM_Queue_Length()); for (i = 0; i < 10; ++i) { rt = GM_Queue_Dequeue(&value); printf("DEQUEUE rt=%d: value=%d\n", rt, value); } rt = GM_Queue_Dequeue(&value); printf("DEQUEUE rt=%d: value=%d\n", rt, value); for (i = 0; i < 10; ++i) { rt = GM_Queue_Enqueue(i); printf("ENQUEUE rt=%d: value=%d\n", rt, i); } GM_Queue_Clear(); printf("COUNT=%d\n", GM_Queue_Length());}

转载于:https://my.oschina.net/kaixindewo/blog/30424

转载地址:https://blog.csdn.net/weixin_33881753/article/details/92468794 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:常用Unix系统 逝去的美好
下一篇:如何解决Sublime Text 2中文显示乱码问题

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月16日 20时21分14秒