デュアルエンドチェーンテーブル実装キュー
1934 ワード
今回の実装キューはやはり両端チェーンテーブルを使いました.前編と同じように、両端チェーンテーブルで実装されています.簡単ですか.下に書いてあります.上から直接呼び出します.今ではredisはC言語で書かれているし、下位実装も両端チェーンテーブルであることが重要です.
queue.hファイル
queue.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);
}