기계는 거짓말하지 않는다

원형 큐(Circular Queue) 본문

C

원형 큐(Circular Queue)

KillinTime 2020. 12. 9. 22:58

element 한 자리가 항상 비게되지만, 재정렬 없이 큐 이용이 가능하다.

First In First Out(FIFO) 구조

#include <stdio.h>
#define MAX_Q_SIZE 11 // 원형 큐 이용 가능 크기 MAX_SIZE - 1
typedef enum eSelectMenu {
selectAdd = 1,
selectDelete,
selectPrint,
selectExit
} eSelectMenu;
typedef enum eBool {
false,
true
} eBool;
void Add(int [], int*, int*, int);
int Delete(int [], int*, int*);
eBool IsEmpty(int, int);
eBool IsFull(int, int);
int main(void) {
int queue[MAX_Q_SIZE];
int rear, front, data, i;
eSelectMenu select;
if (MAX_Q_SIZE < 2) {
fprintf(stderr, "Queue size error\n");
return 0;
}
else {
rear = 0;
front = 0;
}
while (1) {
printf("1. add / 2. delete / 3. print / 4. exit\n");
printf("select: ");
scanf_s("%d", &select);
switch (select) {
case selectAdd:
if (IsFull(front, rear) == true) {
printf("Queue Full\n\n");
break;
}
printf("data: ");
scanf_s("%d", &data);
Add(queue, &front, &rear, data);
printf("\n");
break;
case selectDelete:
if (IsEmpty(front, rear) == true) {
printf("Queue Empty\n\n");
break;
}
printf("return data: %d\n\n", Delete(queue, &front, &rear));
break;
case selectPrint:
printf("\n< Print >\n");
printf("front: %d, rear: %d\n", front, rear);
if (IsEmpty(front, rear) == true)
printf("Qeueu Empty");
else {
for (i = (front + 1) % MAX_Q_SIZE; i != (rear + 1) % MAX_Q_SIZE; i = (i + 1) % MAX_Q_SIZE)
printf("%d ", queue[i]);
}
printf("\n\n");
break;
case selectExit:
printf("Exit Program\n");
return 0;
default:
printf("re\n\n");
}
while (getchar() != '\n') {}
}
}
void Add(int queue[], int * front, int * rear, int data) {
*rear = (*rear + 1) % MAX_Q_SIZE;
queue[*rear] = data;
}
int Delete(int queue[], int * front, int * rear) {
int data;
*front = (*front + 1) % MAX_Q_SIZE;
data = queue[*front];
return data;
}
eBool IsFull(int front, int rear) {
return (rear + 1) % MAX_Q_SIZE == front ? true : false;
}
eBool IsEmpty(int front, int rear) {
return rear == front ? true : false;
}

 

'C' 카테고리의 다른 글

이중 연결 리스트(Doubly Linked List)  (0) 2021.04.25
링크드 리스트(Linked List)  (0) 2020.12.12
스택(Stack)  (0) 2020.12.09
Short Circuit Evaluation(SCE, 단축 평가)  (0) 2020.12.06
C언어 키워드  (0) 2020.12.05
Comments