배우고픈 공돌이
범용 큐 본문
//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