单向循环队列

来源:互联网 发布:网络团队建设 编辑:程序博客网 时间:2024/05/18 01:59

相信有了前面的基础我们可以很容易的实现单向循环队列

需要引入我的链表的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");   }
1 0
原创粉丝点击