Stack(栈)和Heap(堆)Link Node 小结

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值