您的位置:首页 > 其它

单向循环队列

2016-09-17 19:55 363 查看
相信有了前面的基础我们可以很容易的实现单向循环队列

需要引入我的链表的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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: