にほうこうじゅんかんキュー


双方向ループキューを容易に実現できると信じています
私のチェーンテーブルのlistを導入する必要があります.cとlist.h
ヘッダファイル
//
//  double_queue.h
//  double_queue
//
//  Created by bikang on 16/9/12.
//  Copyright (c) 2016  bikang. All rights reserved.
//

#ifndef __double_queue__double_queue__
#define __double_queue__double_queue__

#include "double_list.h"

typedef DList Dqueue;

#define dqueue_init list_init
#define dqueue_destroy list_destroy

//      
int dqueue_head_enqueue(Dqueue *queue, void *data);
//      
int dqueue_head_dequeue(Dqueue *queue, void **data);

//      
int dqueue_tail_enqueue(Dqueue *queue, void *data);
//      
int dqueue_tail_dequeue(Dqueue *queue, void **data);

#define dqueue_tail_peek(queue)((queue)->tail == NULL?NULL:((queue)->tail->data))
#define dqueue_head_peek(queue)((queue)->head == NULL?NULL:((queue)->head->data))
#define dqueue_size dlist_size

#endif /* defined(__double_queue__double_queue__) */

インプリメンテーションコード
//
//  double_queue.c
//  double_queue
//
//  Created by bikang on 16/9/12.
//  Copyright (c) 2016  bikang. All rights reserved.
//

#include "double_queue.h"
//      
int dqueue_head_enqueue(Dqueue *queue, void *data){
    return list_ins_pre(queue,dlist_head(queue),data);
}
//      
int dqueue_head_dequeue(Dqueue *queue, void **data){
    return list_rem(queue,dlist_head(queue),data);
}

//      
int dqueue_tail_enqueue(Dqueue *queue, void *data){
    return list_ins_next(queue,dlist_tail(queue),data);
}
//      
int dqueue_tail_dequeue(Dqueue *queue, void **data){
    return list_rem(queue,dlist_tail(queue),data);
}

テスト
//
//  main.c
//  queue
//
//  Created by bikang on 16/9/9.
//  Copyright (c) 2016  bikang. All rights reserved.
//

#include 
#include "double_queue.h"

void tqueue();
void p_queue(Dqueue *queue);

int main(int argc, const char * argv[]) {
    tqueue();


    return 0;
}

void tqueue(){
    Dqueue *queue = (Dqueue *)malloc(sizeof(Dqueue));
    dqueue_init(queue,NULL);

    Dqueue *queue2 =(Dqueue *)malloc(sizeof(Dqueue));
    dqueue_init(queue2,NULL);
    int *p1,*p2,*p3;
    int i1 = 1;p1 = &i1;
    int i2 = 2;p2 = &i2;
    int i3 = 3;p3 = &i3;

    dqueue_head_enqueue(queue,(void*)p1);
    dqueue_head_enqueue(queue,(void*)p2);
    dqueue_head_enqueue(queue,(void*)p3);

    dqueue_head_enqueue(queue2,(void*)p1);
    dqueue_head_enqueue(queue2,(void*)p2);
    dqueue_head_enqueue(queue2,(void*)p3);

    printf("queue_size=%d
"
,dqueue_size(queue)); p_queue(queue); p_queue(queue2); int *data1 = (int*)malloc(sizeof(int)); dqueue_head_dequeue(queue, (void**)&data1); printf("dequeue=%d
"
,*data1); dqueue_head_dequeue(queue2, (void**)&data1); printf("dequeue=%d
"
,*data1); if(dqueue_size(queue)){ printf("top=%d
"
,*(int*)dqueue_head_peek(queue)); } p_queue(queue); p_queue(queue2); dqueue_destroy(queue2); dqueue_destroy(queue); } void p_queue(Dqueue *queue){ if(dqueue_size(queue) == 0)return; DListElmt *head = queue->head; while(head != NULL){ printf("%d,",*(int*)(head->data)); head = head->next; } printf("
"
); }