typedef struct _Node { int data_len; // 存储在节点中的数据长度 char *data; // 存储在节点中的数据 struct _Node *next; // 队列中的下一个节点地址 }NODE; typedef struct _Queue { NODE *head; // 队列的头部 NODE *end; // 队列的尾部 int count; // 队列长度 }QUEUE; bool InitQueue( QUEUE *queue ) { if( NULL == queue ) { return false; } queue->head = NULL; queue->end = NULL; queue->count = 0; return true; } // 在队列中插入节点 bool Enqueue( QUEUE *queue, char *queue_data, int data_len ) { if( NULL == queue || NULL == queue_data ) { return false; } // 开辟新节点 NODE *new_node = (NODE *)malloc( sizeof(NODE) ); if( NULL == new_node ) { return false; } // 开辟空间存储数据 new_node->data = (char *)malloc( data_len ); if( NULL == new_node->data ) { return false; } memcpy( new_node->data, queue_data, data_len ); new_node->next = NULL; new_node->data_len = data_len; // 如果队列为空,则新节点即是头部,也是尾部 if( queue->head == NULL ) { queue->head = new_node; queue->end = new_node; } else { // 如果队列不为空,将此节点连接到队列的尾部 queue->end->next = new_node; // 队列新尾部指向此节点 queue->end = new_node; } queue->count ++; return true; } // 从队列中读出一个节点 NODE *Dequeue( QUEUE *queue ) { if( NULL == queue ) { return NULL; } // 如果队列为空,则无数据可从数列读出,直接返回 if( NULL == queue->head ) { return NULL; } // 保存队列首节点 NODE *node_tmp = queue->head; // 将首节点的下一个节点(第二个节点)设置为首节点,即删除了首节点 queue->head = node_tmp->next; // 如果新首节点为空,则队列为空 if( NULL == queue->head ) { queue->end = NULL; } queue->count --; return node_tmp; } // 释放队列所有内存 void FreeQueue( QUEUE *queue ) { if( queue ) { return; } NODE *tmp_node1 = queue->head; while( tmp_node1 ) { NODE *tmp_node2 = tmp_node1; free( tmp_node1->data ); free( tmp_node1 ); tmp_node1->data = NULL; tmp_node1 = NULL; tmp_node1 = tmp_node2->next; } }