相信有了前面的基础我们可以很容易的实现队列
需要引入我的链表的list.c和list.h
头文件
//
// queue.h
// queue
//
// Created by bikang on 16/9/9.
// Copyright (c) 2016年 bikang. All rights reserved.
//
#ifndef __queue__queue__
#define __queue__queue__
#include "list.h"
typedef List Queue ;
#define queue_init list_init
#define queue_destroy list_destroy
int queue_enqueue(Queue *queue,const void *data);
int queue_dequeue(Queue *queue,void **data);
#define queue_peek(queue)((queue)->head == NULL?NULL:((queue)->head->data))
#define queue_size list_size
#endif /* defined(__queue__queue__) */
实现代码
//
// queue.c
// queue
//
// Created by bikang on 16/9/9.
// Copyright (c) 2016年 bikang. All rights reserved.
//
#include "queue.h"
//入队列
int queue_enqueue(Queue *queue,const void *data){
return list_ins_next(queue,list_tail(queue),data);
}
//出队列
int queue_dequeue(Queue *queue,void **data){
return list_rem_next(queue,NULL,data);
}
测试代码
//
// main.c
// queue
//
// Created by bikang on 16/9/9.
// Copyright (c) 2016年 bikang. All rights reserved.
//
#include <stdio.h>
#include "queue.h"
void tqueue();
int main(int argc, const char * argv[]) {
tqueue();
return 0;
}
void tqueue(){
Queue *queue = (Queue *)malloc(sizeof(Queue));
queue_init(queue,NULL);
int *p1,*p2,*p3;
int i1 = 1;p1 = &i1;
int i2 = 2;p2 = &i2;
int i3 = 3;p3 = &i3;
queue_enqueue(queue,(void*)p1);
queue_enqueue(queue,(void*)p2);
queue_enqueue(queue,(void*)p3);
printf("queue_size=%d\n",queue_size(queue));
int *data1 = (int*)malloc(sizeof(int));
queue_dequeue(queue, (void**)&data1);
printf("dequeue=%d\n",*data1);
if(queue_peek(queue)){
printf("top=%d\n",*(int*)queue_peek(queue));
}
queue_destroy(queue);
}