双端链表实现队列

来源:互联网 发布:政府网络危机公关案例 编辑:程序博客网 时间:2024/06/02 00:45

     这次实现队列还是用到了双端链表,和上篇的一样,也是双端链表实现的,简单么,下面写好了,上面直接调用。现在redis竟然是用C语言写的,而且底层实现也是双端链表,这是非常重要滴

  queue.h文件

#ifndef _QUEUE_H_#define _QUEUE_H_#include "tools.h"typedef struct Queue{    Dlist *dlist;   //封装双端链表为队列的控制信息}Queue;//队列的接口Qeuue *queue_init(void);   //对列的初始化void destroy_queue(Queue **queue);    //队列的销毁void in(Queue *queue, void *value);   //入队操作Boolean out(Queue *queue);    //出队操作Boolean get_queue_front(Queue *queue, void **value);   //得到队首元素Boolean is_queue_empty(Queue *queue);   //判断队列是否为空int get_queue_count(Queue *queue);   //得到队列元素个数#endif

queue.c文件


#include "queue.h"//队列的初始化Queue *init_queue(void){    Queue *queue = (Queue *)Malloc(sizeof(Queue));    queue->dlist = init_queue();    bzero(queue,sizeof(Queue));    return queue;}//队列的销毁void destroy_queue(Queue **queue){    Dlist_node *p_node = NULL;    if(queue == NULL || *queue == NULL){      return ;    }         destroy_dlist(&((*queue)->dlist));    free(*queue);    *queue = NULL;}//入队操作void in_queue(Queue *queue,void *value){   if(queue == NULL || value == NULL){      return ;   }   push_back(queue->dlist,value);}//出队操作Boolean out_queue(Queue *queue){    if(queue == NULL || is_queue_empty(queue)){      return FALSE;    }    pop_front(queue->dlist);    return TRUE;}//得到队首元素Boolean is_queue_empty(Queue *queue){  return queue->dlist->count == ZERO;}//判断队列是否为空Boolean get_queue_front(Queue *queue,void **value){  if(queue == NULL ||  value == NULL     || is_stack_empty(queue)    || get_front(queue->dlist,value) == FALSE{        return FALSE;   }     return TRUE;}//得到队列元素个数int get_queue_count(Queue *queue){  if(queue == NULL){    return ERROR;  }  return get_dlist_count(queue->dlist);}


0 0
原创粉丝点击