#define QUEUE_H
typedef struct Queue_Node * qnode;
struct Queue_Node{
void * data;
};
unsigned long queue_len;
long queue_front;
unsigned long queue_rear;
qnode * init_queue(unsigned long len);
void en_queue(qnode * queue,void * val);
qnode de_queue(qnode * queue);
void free_queue(qnode * queue);
#endif
#include <stdio.h>
#include <stdlib.h>
#include "Queue.h"
qnode * init_queue(unsigned long len){
if(0==len) return NULL;
queue_len=len;
queue_front=-1;
queue_rear=0;
qnode * r=calloc(len,sizeof(qnode));
return r;
}
void en_queue(qnode * queue,void * val){
if(NULL==queue) return;
if(queue_front==queue_rear % queue_len){
printf("\nqueue full....\n");
return;
}
if(-1==queue_front){
queue_front=0;
}
qnode t=malloc(sizeof *t);
t->data=val;
printf("%d ",*((int *)(t->data)));
queue[queue_rear]=t;
queue_rear=(queue_rear+1) % queue_len;
}
qnode de_queue(qnode * queue){
if(NULL==queue) return NULL;
if(-1==queue_front){
printf("queue empty...\n");
return NULL;
}
qnode r=queue[queue_front];
queue_front=(queue_front+1) % queue_len;
return r;
}
void free_queue(qnode * queue){
if(NULL==queue) return;
int i;
for(i=0;i<queue_len;i++){
if(NULL!=queue[i]){
continue;
}
free(queue[i]);
}
free(queue);
}