├── MyQueue.c ├── MyQueue.h ├── MyQueue_demo.c └── README.md /MyQueue.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MGDG/MyQueue/8929fc37839412cb0aca57d8a4f27e4089d851e3/MyQueue.c -------------------------------------------------------------------------------- /MyQueue.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @file MyQueue.h 3 | * @author mgdg 4 | * @brief 队列驱动文件 5 | * @version v1.1 6 | * @date 2019-09-12 7 | * @remark 创建可以存放任意元素的环形队列,包含了入队出队等基本操作 8 | */ 9 | 10 | #ifndef __MYQUEUE_H 11 | #define __MYQUEUE_H 12 | 13 | #include 14 | #include 15 | 16 | /*队列句柄*/ 17 | typedef struct myQueue *myQueueHandle_t; 18 | 19 | /** 20 | * @brief 创建队列 21 | * @param queue_len:队列长度,存储的元素个数 22 | * @param item_size:队列单个元素的大小,以字节为单位 23 | 24 | * @return myQueueHandle_t:队列句柄 25 | * @remark 26 | */ 27 | myQueueHandle_t myQueueCreate(size_t queue_len,size_t item_size); 28 | 29 | /** 30 | * @brief 删除队列 31 | * @param queue:队列句柄 32 | 33 | * @return void 34 | * @remark 35 | */ 36 | void myQueueDelete(myQueueHandle_t queue); 37 | 38 | /** 39 | * @brief 获取队列已存放数据个数 40 | * @param queue:队列句柄 41 | * 42 | * @return size_t:队列数据个数 43 | * @remark 44 | */ 45 | size_t myQueueNum(const myQueueHandle_t queue); 46 | 47 | /** 48 | * @brief 获取队列剩余可存放数据个数 49 | * @param queue:队列句柄 50 | * 51 | * @return size_t:队列剩余可存放数据个数 52 | * @remark 53 | */ 54 | size_t myQueueLeftNum(const myQueueHandle_t queue); 55 | 56 | /** 57 | * @brief 获取队列总容量 58 | * @param queue:队列句柄 59 | * 60 | * @return size_t:队列容量 61 | * @remark 62 | */ 63 | size_t myQueueCapacity(const myQueueHandle_t queue); 64 | 65 | /** 66 | * @brief 队列是否已满 67 | * @param queue:队列句柄 68 | * 69 | * @return bool:队列满状态 70 | * @remark 71 | */ 72 | bool myQueueIsFull(const myQueueHandle_t queue); 73 | 74 | /** 75 | * @brief 队列是否已空 76 | * @param *queue:队列句柄 77 | * 78 | * @return bool:队列空状态 79 | * @remark 80 | */ 81 | bool myQueueIsEmpty(const myQueueHandle_t queue); 82 | 83 | /** 84 | * @brief 将指定个数的数据放入队列 85 | * @param queue:队列句柄 86 | * @param *buf:数据指针 87 | * @param num:数据个数 88 | * 89 | * @return bool:是否放入成功 90 | * @remark 91 | */ 92 | bool myQueuePut(myQueueHandle_t queue,const void *buf,size_t num); 93 | 94 | /** 95 | * @brief 从队列中取出指定个数的数据 96 | * @param queue:队列句柄 97 | * @param *buf:数据指针 98 | * @param num:取出的队列个数 99 | * 100 | * @return bool:是否取出成功 101 | * @remark 102 | */ 103 | bool myQueueGet(myQueueHandle_t queue,void *buf,size_t num); 104 | 105 | /** 106 | * @brief 从指定偏移位置开始,从队列中获取指定个数的数据,但是不弹出数据 107 | * @param queue:队列句柄 108 | * @param *buf 109 | * @param num:数据长度 110 | * @param offset:偏移位置 111 | * 112 | * @return bool:是否获取成功 113 | * @remark 114 | */ 115 | bool myQueuePeek(const myQueueHandle_t queue,void *buf,size_t num,size_t offset); 116 | 117 | /** 118 | * @brief 弹掉指定个数的数据 119 | * @param queue:队列句柄 120 | * @param num:长度 121 | * 122 | * @return bool:是否弹出成功 123 | * @remark 124 | */ 125 | bool myQueuePop(myQueueHandle_t queue,size_t num); 126 | 127 | /** 128 | * @brief POP所有数据 129 | * @param queue:队列句柄 130 | * 131 | * @return bool:是否弹出成功 132 | * @remark 133 | */ 134 | bool myQueuePopAll(myQueueHandle_t queue); 135 | 136 | #endif 137 | -------------------------------------------------------------------------------- /MyQueue_demo.c: -------------------------------------------------------------------------------- 1 | /** 2 | * @file MyQueue_demo.c 3 | * @author mgdg 4 | * @brief demo 5 | * @version v1.0 6 | * @date 2017-09-28 7 | * @remark 8 | */ 9 | 10 | #include 11 | #include 12 | #include "stdbool.h" 13 | #include "MyQueue.h" 14 | 15 | typedef unsigned char uint8_t; 16 | typedef unsigned int uint32_t; 17 | 18 | myQueueHandle_t DemoQueue; 19 | 20 | uint8_t DemoQueueBuf[1024]; 21 | 22 | void test3(void) 23 | { 24 | uint8_t bufx[50],bufy[50]; 25 | uint32_t i,num; 26 | 27 | for(i=0;i<50;i++) 28 | bufx[i] = i; 29 | 30 | memset(DemoQueueBuf,0x00,sizeof(DemoQueueBuf)); 31 | memset(bufy,0x00,sizeof(bufy)); 32 | 33 | DemoQueue = myQueueCreate(1024,1); 34 | 35 | if(NULL != DemoQueue) 36 | { 37 | 38 | printf("queue data count : %d\r\n",myQueueNum(DemoQueue)); 39 | printf("queue data left count : %d\r\n",myQueueLeftNum(DemoQueue)); 40 | printf("queue is full : %d\r\n",myQueueIsFull(DemoQueue)); 41 | printf("queue is empty : %d\r\n",myQueueIsEmpty(DemoQueue)); 42 | printf("queue size : %d\r\n",myQueueCapacity(DemoQueue)); 43 | printf("creat success\r\n\r\n"); 44 | 45 | 46 | myQueuePut(DemoQueue,bufx,10); 47 | printf("queue data count : %d\r\n",myQueueNum(DemoQueue)); 48 | printf("queue data left count : %d\r\n",myQueueLeftNum(DemoQueue)); 49 | printf("queue is full : %d\r\n",myQueueIsFull(DemoQueue)); 50 | printf("queue is empty : %d\r\n",myQueueIsEmpty(DemoQueue)); 51 | printf("queue size : %d\r\n",myQueueCapacity(DemoQueue)); 52 | 53 | printf("\r\n"); 54 | 55 | for(i=0;i<10;i++) 56 | printf("%02X ",bufy[i]); 57 | printf("\r\n"); 58 | 59 | myQueuePeek(DemoQueue,bufy,5,5); 60 | for(i=0;i<10;i++) 61 | printf("%02X ",bufy[i]); 62 | printf("\r\n"); 63 | printf("queue data count : %d\r\n",myQueueNum(DemoQueue)); 64 | printf("queue data left count : %d\r\n",myQueueLeftNum(DemoQueue)); 65 | printf("queue is full : %d\r\n",myQueueIsFull(DemoQueue)); 66 | printf("queue is empty : %d\r\n",myQueueIsEmpty(DemoQueue)); 67 | printf("queue size : %d\r\n",myQueueCapacity(DemoQueue)); 68 | 69 | } 70 | else 71 | { 72 | printf("creat error\r\n"); 73 | } 74 | } 75 | 76 | void main(void) 77 | { 78 | test3(); 79 | while(1); 80 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MyQueue 2 |  可以存放任意元素的环形队列,包含了入队出队等基本操作 3 | # 使用方法 4 | 见 MyQueue_demo.c 5 | --------------------------------------------------------------------------------