자료구조_c언어_서클 큐_circleQueue_01
2021. 2. 10. 11:11ㆍ개발하는중/자료구조
728x90
반응형
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 107 108 109 110 111 112 113 114 115 116 117 118 119 | #include <stdio.h> #include <stdlib.h> #define cQ_SIZE 4 typedef char element; // char형을 queue element의 자료형으로 정의 typedef struct { element queue[cQ_SIZE]; int front, rear; }cQueueType; cQueueType *createQueue() { cQueueType *cQ; cQ = (cQueueType *)malloc(sizeof(cQueueType)); cQ->front = 0; cQ->rear = 0; return cQ; } int isEmpty(cQueueType *cQ) { if (cQ->front == cQ->rear) { printf("\n Circular Queue is empty! \n"); return 1; } else { return 0; } } int isFull(cQueueType *cQ) { if (((cQ->rear + 1) % cQ_SIZE) == cQ->front) { printf("\n Circular Queue is full! \n"); return 1; } else { return 0; } } void enQueue(cQueueType *cQ, element item) { if (isFull(cQ)) { exit(1); } else { cQ->rear = (cQ->rear+1) % cQ_SIZE; // rear+1에 cQ_SIZE 나머지를 rear에 준다. cQ->queue[cQ->rear] = item; } } element deQueue(cQueueType *cQ) { if (isEmpty(cQ)) { exit(1); } else { cQ->front = (cQ->front + 1) % cQ_SIZE; return cQ->queue[cQ->front]; } } void del(cQueueType *cQ) { if (isEmpty(cQ)) { exit(1); } else { cQ->front = (cQ->front + 1) % cQ_SIZE; } } element peek(cQueueType *cQ) { if (isEmpty(cQ)) { exit(1); } else { return cQ->queue[(cQ->front + 1) % cQ_SIZE]; } } void printQ(cQueueType *cQ) { int i, first, last; first = (cQ->front + 1) % cQ_SIZE; // 1. cQ가 가르키는 front에 +1 하고 나머지 연산자로 결과값 first넣어줌 last = (cQ->rear + 1) % cQ_SIZE; // 2. 동일하게 last에 넣어줌 printf("\n Circular Queue : ["); i = first; // 3. i에 1번first 넣어줌 while (i != last) // 4. i==first 이므로 i가 last와 같을때까지 실행 { printf("%3c", cQ->queue[i]); i = (i + 1) % cQ_SIZE; } printf("]"); } void main(void) { cQueueType *cQ1 = createQueue(); element data; enQueue(cQ1, 'A'); printQ(cQ1); enQueue(cQ1, 'B'); printQ(cQ1); deQueue(cQ1); printQ(cQ1); enQueue(cQ1, 'C'); printQ(cQ1); data = peek(cQ1); printf("\n peek item: %c", data); deQueue(cQ1); printQ(cQ1); deQueue(cQ1); printQ(cQ1); getchar(); } | cs |
728x90
'개발하는중 > 자료구조' 카테고리의 다른 글
자료구조_c언어_큐스택_queueStack_01 (0) | 2021.05.17 |
---|---|
자료구조_c언어_배열스택_arrayStack_05 (0) | 2021.02.24 |
자료구조_c언어_배열스택_arrayStack_04 (0) | 2021.02.04 |
자료구조_c언어_배열스택_arrayStack_03 (0) | 2021.02.03 |
자료구조_c언어_배열스택_arrayStack_02 (0) | 2021.02.02 |