C实现消息队列Queue
2011-08-23 11:59
337 查看
/** * @file GM_Queue.h * @brief 采用链表实现,链表的头部为队首, 链表的尾部为队尾, Enqueue在队尾进行操作, Dequeue在队首进行操作 * @author Don Hao * @date 2011-8-22 22:32:57 * @version * <pre><b>copyright: </b></pre> * <pre><b>email: </b>hao.limin@gmail.com</pre> * <pre><b>company: </b>http://blog.csdn.net/donhao</pre> * <pre><b>All rights reserved.</b></pre> * <pre><b>modification:</b></pre> * <pre>Write modifications here.</pre> */ #ifndef _GM_QUEUE_H #define _GM_QUEUE_H #include <stdlib.h> #ifdef __cplusplus extern"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 Don Hao * @date 2011-8-22 22:32:51 * @version * <pre><b>copyright: </b></pre> * <pre><b>email: </b>hao.limin@gmail.com</pre> * <pre><b>company: </b>http://blog.csdn.net/donhao</pre> * <pre><b>All rights reserved.</b></pre> * <pre><b>modification:</b></pre> * <pre>Write modifications here.</pre> */ #include "GM_Queue.h" #include <stdio.h> 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()); }
相关文章推荐
- RabbitMQ(python实现)学习之二:Producer发送消息至多个消息队列queue(广播消息)
- 消息队列MQ实践----实现Queue(队列消息)和Topic(主题消息)两种模式
- javaweb简单实现前台请求的非阻塞消息队列(ConcurrentLinkedQueue)
- 利用redis实现消息队列之queue模式
- RabbitMQ(python实现)学习之二:Producer发送消息至多个消息队列queue(广播消息)
- JDK源码分析之主要阻塞队列实现类ArrayBlockingQueue -- java消息队列/java并发编程/阻塞队列
- 消息队列MQ实践----实现Queue(队列消息)和Topic(主题消息)两种模式
- Linux 消息队列的实现
- C语言队列QUEUE简单实现
- 使用消息队列实现分布式事物---公认较为理想的分布式事物解决方案
- linux基础编程 共享内存 通过消息队列实现同步 shmget
- PHP消息队列实现及应用:流量削峰案列(Redis的List类型实现秒杀)
- 消息队列 mq_queue,报错: message too long
- 简单易用的消息队列框架的设计与实现
- ZooKeeper实现分布式队列Queue
- ActiveMQ发消息、收消息、持久化,查询队列剩余消息数、出队数的实现
- C++最大堆实现priority_queue优先级队列(算法导论)
- java 5并发中的阻塞队列ArrayBlockingQueue的使用以及案例实现
- PHP memcache实现消息队列实例
- Implement Queue using Stacks 两个栈实现队列