相信有了前面的基础我们可以很容易的实现单向循环队列
需要引入我的链表的list.c和list.h
头文件
//
// cycle_queue.h
// cycle_queue
//
// Created by bikang on 16/9/12.
// Copyright (c) 2016年 bikang. All rights reserved.
//
#ifndef __cycle_queue__cycle_queue__
#define __cycle_queue__cycle_queue__
#include "clist.h"
typedef CList Cqueue;
//从前面入队列
int cqueue_enqueue(Cqueue *queue, void *data);
//从前面出队列
int cqueue_dequeue(Cqueue *queue, void **data);
#define cqueue_peek(queue)((queue)->head == NULL?NULL:((queue)->head->data))
#define cqueue_size clist_size
#define cqueue_init clist_init
#define cqueue_destroy clist_destroy
#endif /* defined(__cycle_queue__cycle_queue__) */
实现
//
// cycle_queue.c
// cycle_queue
//
// Created by bikang on 16/9/12.
// Copyright (c) 2016年 bikang. All rights reserved.
//
#include "cycle_queue.h"
#include <stdlib.h>
int cqueue_enqueue(Cqueue *queue, void *data){
return clist_ins_next(queue,clist_head(queue),data);
}
int cqueue_dequeue(Cqueue *queue, void **data){
return clist_rem_next(queue,clist_head(queue),data);
}
测试用例
//
// main.c
// cycle_queue
//
// Created by bikang on 16/9/12.
// Copyright (c) 2016年 bikang. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include "cycle_queue.h"
void tqueue();
void p_queue(Cqueue *queue);
int main(int argc, const char * argv[]) {
tqueue();
return 0;
}
void tqueue(){
Cqueue *queue = (Cqueue *)malloc(sizeof(Cqueue));
cqueue_init(queue,NULL);
int *p1,*p2,*p3;
int i1 = 1;p1 = &i1;
int i2 = 2;p2 = &i2;
int i3 = 3;p3 = &i3;
cqueue_enqueue(queue,(void*)p1);
cqueue_enqueue(queue,(void*)p2);
cqueue_enqueue(queue,(void*)p3);
printf("queue_size=%d\n",cqueue_size(queue));
p_queue(queue);
int *data1 = (int*)malloc(sizeof(int));
cqueue_dequeue(queue, (void**)&data1);
printf("dequeue=%d\n",*data1);
if(cqueue_size(queue)){
printf("top=%d\n",*(int*)cqueue_peek(queue));
}
p_queue(queue);
cqueue_destroy(queue);
}
void p_queue(Cqueue *queue){
if(cqueue_size(queue) == 0)return;
CListElmt *cur = queue->head;
int i;
for(i=0;i<cqueue_size(queue);i++){
printf("%d,",*(int*)cur->data);
cur = cur->next;
}
printf("\n");
}