1.queue 队列的实现主要是结构本中构造一个管理指针,在通过管理的指针来管理一个列表样子的结点;而且这个结点是通过malloc来分配的。
//数据构造:
typedef struct node
{void *data; //void *类的数据,
struct node *next; //结点指针
} node;
typedef struct queue
{
struct node *head;
struct node *tail; //也是结点指针
} Queue;
// 对数据的操作;init
void queue_init(Queue *queue)
{
queue->head = NULL;
queue->tail = NULL;
}
//入队
void inqueue(Queue *queue, void *user_node)
{
node *n = malloc_r(sizeof(node)); //这里用到了malloc 注意这里是建 结点的
n->data = user_node; //用户数据
n->next = NULL;
if (queue->head == NULL) {
queue->head = n; //入队时分两种情况,为空时,和不为空时的操作
} else {
queue->tail->next = n; //入队时要把要入的结点放到前一个结点的next,同时返回此结点作tail
}
queue->tail = n;
}
//return user_node
void * dequeue(Queue *queue)
{
void *data;
node *n = queue->head;
data = n->data;
queue->head = n->next;
free(n); //出队释放 空间
return data;
}
bool is_empty(Queue *queue)
{
return queue->head == NULL; // 出队时,头为空表示队空了
}
// 构造泛型类的查找方法,比较条件是一个,void *数据
void *queue_find(Queue *queue, void *data, bool (*compare)(const void *first, const void *second))
{
node *n = queue->head;
while(n != NULL)
{
if (compare(n->data, data))
{
return n;
}
n = n->next;
}
return NULL;
}
void queue_destroy(Queue *queue)
{
queue->head = NULL;
queue->tail = NULL;
}