/*                                        FIFO     데이터 크기 가변                               */




/*                                        queue4.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
#include <stdio.h>
#include <stdlib.h>
#include "queue4.h"
 
void insert(Queue *ps, int data)
{
    if(ps->rear == ps->size)
    {
        fprintf(stderr, "queue is full. \n");
        exit(-1);
    }
    ps->queue[ps->rear] = data;
    ++ps->rear;
}
 
int delete(Queue *ps)
{
    if(ps->front == ps->rear)
    {
        fprintf(stderr, "queue is empty. \n");
        exit(-2);
    }
    return ps->queue[ps->front++];
}
void initStack(Queue *ps, size_t size)
{
    ps->size = size;
    ps->front = 0;
    ps->rear = 0;
    ps->queue = (int*)malloc(sizeof(int)*size);
}
void cleanupStack(Queue *ps)
{
    free(ps->queue);
    ps->queue=NULL;
}
 


/*                                         testqueue4.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
#include <stdio.h>
#include "queue4.h"
 
int main(void)
{
    Queue q1, q2;
    initStack(&q1, 10);
    initStack(&q2, 20);
    
    insert(&q1, 100);
    insert(&q1, 200);
    insert(&q1, 300);
    
    insert(&q2, 700);
    insert(&q2, 800);
    insert(&q2, 900);
    
    printf("q1 1st deleteQ : %d\n"delete(&q1));
    printf("q1 2st deleteQ : %d\n"delete(&q1));
    printf("q1 3st deleteQ : %d\n"delete(&q1));
    
    printf("q2 1st deleteQ : %d\n"delete(&q2));
    printf("q2 2st deleteQ : %d\n"delete(&q2));
    printf("q2 3st deleteQ : %d\n"delete(&q2));
        
    cleanupStack(&q1);
    cleanupStack(&q2);
    return 0;
}
 


/*                                    queue4.h                            */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef QUEUE4_H
#define QUEUE4_H
 
 
typedef struct{
    int *queue;
    size_t size;
    int front;
    int rear;    
} Queue;
 
void insert(Queue *ps, int data);
int delete(Queue *ps);
void initStack(Queue *ps, size_t size);
void cleanupStack(Queue *ps);
 
#endif
 



Posted by 차희빈

차희빈

달력