#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct Queue{
int head;
int rear;
int allocLength;
int elemSize;
void * elems;
};
void InitQueue(struct Queue *q,int len,int elemSize){
q->allocLength = len;
q->elemSize = elemSize;
q->elems = malloc(q->allocLength * q->elemSize);
q->head = 0;
q->rear = 0;
}
int isEmpty(struct Queue * q){
return (q->head == q->rear);
}
int isFull(struct Queue * q){
return (((q->rear + 1) % q->allocLength) == q->head);
}
void * del(struct Queue * q){
void * result;
if(isEmpty(q)){
//queue is empty
printf("queue is empty");
return NULL;
}
result = ((char *)(q->elems) + q->head * q->elemSize);
q->head = (q->head + 1) % q->allocLength;
return result;
}
void insert(struct Queue * q,void * data){
if(isFull(q)){
//printf("queue is full");
//return NULL;
q->allocLength += 5;
q->elems = realloc(q->elems,q->allocLength * q->elemSize);
}
memcpy((char *)(q->elems) + q->rear * q->elemSize,data,q->elemSize);
q->rear = (q->rear + 1) % q->allocLength;
}
int main(void){
struct Queue q;
int data[10] = {1,5,3,7,9,5,3,7,6,0};
int i;
int * tmp;
InitQueue(&q,10,sizeof(int));
for(i=0;i<10;i++){
insert(&q,&data[i]);
}
for(i=0;i<10;i++){
tmp = del(&q);
printf("%d ",*tmp);
}
getchar();
return 0;
}
输出结果