별의 공부 블로그 🧑🏻‍💻
728x90
728x170
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// 원형 큐 예
 
#include <stdio.h>
#include <stdlib.h>
 
typedef int element;
typedef struct {
    element *queue;
    int front, rear;
    int size;
} QueueType;
 
 
void init(QueueType *q) {
    q->front = q->rear = 0;
    q->size = 2;        // 원형 큐의 특징 때문에
    q->queue = (element *)malloc(sizeof(element)*q->size);
}
 
int is_full(QueueType *q) {
    return ((q->rear + 1) % q->size == q->front);
}
 
void queueFull(QueueType *q) {        // 포화 상태일 경우, 크기 2배 증가                                                       
    element *data = (element *)malloc(sizeof(element)*q->size);
    int start = (q->front + 1) % q->size;
    int end = (q->rear + 1) % q->size;
    int i, j;
    if (start < end) {
        for (i = start, j = 1; i < end; i++, j++) {
            data[j] = q->queue[i];
        }
    }
    else {
        for (i = start, j = 1; i < q->size; i++, j++) {
            data[j] = q->queue[i];
        }
        for (i = 0; i < end; i++, j++) {
            data[j] = q->queue[i];
        }
    }
    q->front = 0;
    q->rear = g->size - 1;
    free(q->queue);
    q->queue = (element *)malloc(sizeof(element)*q->size * 2);
    for (i = 0; i <= q->rear; i++) {
        q->queue[i] = data[i];
    }
    q->size *= 2;
    free(data);
}
 
void enqueue(QueueType *q, element item) {
    if (is_full(q)) {
        printf("큐가 포화상태입니다. \n");
        queueFull(q);
    }
    q->rear = (q->rear + 1) % q->size;
    q->queue[q->rear] = item;
}
 
element dequeue(QueueType *q) {
    if (is_empty(q)) {
        error("큐가 공백상태입니다.");
    }
    q->front = (q->front + 1) % q->size;
    return q->queue[q->front];
}
 
void printQ(QueueType *q) {        // 큐의 내용을 출력하는 연산
    int i, first, last;
    first = (q->front + 1) % q->size;
    last = (q->rear + 1) % q->size;
    printf(" Circular Queue : [");
    if (first > last) {
        for (i = 0; i < last; i++) {
            printf("%3d", q->queue[i]);
        }
        for (i = last; i < first; i++) {
            printf("%3c", '#');
        }
        for (i = first; i < q->size; i++) {
            printf("%3d", q->queue[i]);
        }
    }
    else if (first < last) {
        for (i = 0; i < first; i++) {
            printf("%3c", '#');
        }
        for (i = first i < last; i++) {
            printf("%3d", q->queue[i]);
        }
        for (i = last; i < q->size; i++) {
            printf("%3c", '#');
        }
    }
    else {        // first == last
        for (i = 0; i < q->size; i++) {
            printf("%3c", '#');
        }
    }
 
    printf(" ] \n");
    printf("Front: %d, Rear: %d\n", q->front, q->rear);
}
 
cs


728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️


📖 Contents 📖