/* FIFO 데이터의 형태가 임의형태 */
/* queue5.c */
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <stdio.h> #include <stdlib.h> #include <string.h> #include "queue5.h" void initStack(Queue *ps, size_t size, size_t eleSize) { ps->size = size; ps->front = 0; ps->rear = 0; ps->eleSize = eleSize; ps->queue = malloc(eleSize*size); } void cleanupStack(Queue *ps) { free(ps->queue); ps->queue=NULL; } void insert(Queue *ps, const void *pData) { if(ps->rear == ps->size) { fprintf(stderr, "queue is full. \n"); exit(-1); } memcpy((unsigned char *)ps->queue + ps->rear* ps->eleSize, pData, ps->eleSize); ++ps->rear; } int delete(Queue *ps, void *pData) { if(ps->front == ps->rear) { fprintf(stderr, "queue is empty. \n"); exit(-2); } memcpy(pData,(unsigned char *)ps->queue + ps->front* ps->eleSize, ps->eleSize); ++ps->front; } |
/* testqueue5.c */
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <stdio.h> #include "queue5.h" int main(void) { Queue q1, q2; initStack(&q1, 10, sizeof(int)); initStack(&q2, 10, sizeof(double)); int i; i=100; insert(&q1, &i); i=200; insert(&q1, &i); i=300; insert(&q1, &i); double d; d=1.0; insert(&q2, &d); d=2.0; insert(&q2, &d); d=3.0; insert(&q2, &d); delete(&q1, &i); printf("q1 1st deleteQ : %d\n", i); delete(&q1, &i); printf("q1 2st deleteQ : %d\n", i); delete(&q1, &i); printf("q1 3st deleteQ : %d\n", i); delete(&q2, &d); printf("q2 1st deleteQ : %.2f\n", d); delete(&q2, &d); printf("q2 2st deleteQ : %.2f\n", d); delete(&q2, &d); printf("q2 3st deleteQ : %.2f\n", d); cleanupStack(&q1); cleanupStack(&q2); return 0; } |
/* queue5.h */
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #ifndef QUEUE5_H #define QUEUE5_H typedef struct{ void *queue; size_t size; size_t eleSize; int front; int rear; } Queue; void initStack(Queue *ps, size_t size,size_t elesize); void cleanupStack(Queue *ps); void insert(Queue *ps, const void *pData); int delete(Queue *ps, void *pData); #endif |
'Study > 리눅스' 카테고리의 다른 글
| 리눅스 C언어로 컴파일하기 Bowling CUI (2) (0) | 2014.09.17 |
|---|---|
| 리눅스 C언어로 컴파일하기 Bowling (1) (0) | 2014.09.17 |
| 리눅스 C언어로 컴파일하기 FIFO (4) (0) | 2014.09.12 |
| 리눅스 C언어로 컴파일하기 FIFO (3) (0) | 2014.09.12 |
| 리눅스 C언어로 컴파일하기 FIFO (2) (0) | 2014.09.12 |
