/*                              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





Posted by 차희빈

차희빈

달력