にほうこうじゅんかんキュー
9831 ワード
双方向ループキューを容易に実現できると信じています
私のチェーンテーブルのlistを導入する必要があります.cとlist.h
ヘッダファイル
インプリメンテーションコード
テスト
私のチェーンテーブルの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("
");
}