队列(Queue)

队列是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。

images

代码:

#ifndef QUEUE_H
#define QUEUE_H

#include <stdlib.h>
#include <stdio.h>
#include "dlist.h"

typedef dlist queue;

queue *queue_new() {

    return dlist_new();
}

/**
 * 入队
 * @param queue
 * @param data
 */
void queue_enqueue(queue *queue, void *data) {
    dlist_append(queue, data);
}

/**
 * 出队
 * @param queue
 * @return
 */
void *queue_dequeue(queue *queue) {
    dlist_node *head = dlist_head(queue);

    void *data = dlist_data(head);

    dlist_remove_head(queue);

    return data;
}

#define queue_length(q) (q->size)
#define queue_peek(q) (dlist_data(dlist_head(q)))

/**
 * 释放资源
 * @param q
 * @param callback
 */
void queue_free(queue *q, void (*callback) (void *data)) {
    dlist_free(q, callback);
}

#endif

queue 使用双链表 dlist 实现。