배우고픈 공돌이
범용 큐 본문
//main.c #include <stdio.h> #include "queue.h" int main(void) { queue_t q1, q2; initQueue(&q1,10,sizeof(int)); initQueue(&q2,100,sizeof(double)); int i=100; push(&q1,&i); i=200; push(&q1,&i); i=300; push(&q1,&i); double j = 900.9; push(&q2,&j); j=800.8; push(&q2,&j); j=700.7; push(&q2,&j); pop(&q1,&i); printf("q1 1st pop : %d \n",i); pop(&q1,&i); printf("q1 2nd pop : %d \n",i); pop(&q1,&i); printf("q1 3rd pop : %d \n",i); pop(&q2,&j); printf("s2 1st pop : %f \n",j); pop(&q2,&j); printf("s2 2nd pop : %f \n",j); pop(&q2,&j); printf("s2 3rd pop : %f \n",j); cleanupQueue(&q1); cleanupQueue(&q2); return 0; }
//queue.c #include "queue.h" #include <stdlib.h> #include <stdio.h> #include <assert.h> #include <string.h> void initQueue(queue_t* q, int size, int element_size) { q -> pArr = malloc(element_size*size); assert( q->pArr ); q -> element_size = element_size; q -> size = size; q -> front = 0; q -> rear = 0; } void cleanupQueue(queue_t* q) { free( q->pArr ); } void push(queue_t* q,const void* pData) { assert( (q->rear + 1) % q->size != q->front); memcpy((unsigned char*)q->pArr+((q->rear) * (q->element_size)), pData,q->element_size); q->rear = ( q->rear + 1) % q->size; } void pop(queue_t* q, void* pData) { assert( q->rear != q->front ); memcpy(pData,(unsigned char*)q->pArr+((q->front)*(q->element_size)),q->element_size); q->front = (q->front + 1) % q->size; }
//queue.h #ifndef QUEUE_H #define QUEUE_H typedef struct { void* pArr; int element_size; int rear; int front; int size; } queue_t; void initQueue(queue_t* q, int size, int element_size); void cleanupQueue(queue_t* q); void push(queue_t* q, const void* pData); void pop(queue_t* q, void* pData); #endif
Comments