07장 원형 큐(Circular Queue) – 배열을 이용한
- 원형 큐(Circular Queue) 구현 #1 : S007_ArrayCircularQueue.c
1234567891011#include <stdio.h>#include <stdlib.h>#define QUE_LEN 5int QUEUE[QUE_LEN];int front = 0;int rear = 0;void main(int argc, char* argv[]){} - 원형 큐(Circular Queue) 구현 #2
12345678910111213void enqueue(int data){if( (rear + 1) % QUE_LEN == front){printf("Overflow\n");}else{rear = (rear + 1) % QUE_LEN;QUEUE[rear] = data;}}void main(int argc, char* argv[]){enqueue(1);} - 원형 큐(Circular Queue) 구현 #3
12345678910111213void printQueue(){int i=0;printf("front(%2d), rear(%2d) : ", front, rear);int cnt = (rear - front + QUE_LEN) % QUE_LEN;for(i=0; i<cnt; i++){printf("%d ", QUEUE[(front + i + 1) % QUE_LEN]);}printf("\n");}void main(int argc, char* argv[]){enqueue(1); printQueue();} - 원형 큐(Circular Queue) 구현 #4
123456789101112131415161718int dequeue(){if(front == rear){printf("Empty\n");return -1;}else{front = (front + 1) % QUE_LEN;return QUEUE[front];}}void main(int argc, char* argv[]){enqueue(1); printQueue();enqueue(3); printQueue();enqueue(5); printQueue();printf("POP : %d\n", dequeue()); printQueue();printf("POP : %d\n", dequeue()); printQueue();} - 원형 큐(Circular Queue) 구현 #5
123456789101112131415161718int peek(){if(front == rear){printf("Empty\n");return -1;}else{return QUEUE[(front + 1) % QUE_LEN];}}void main(int argc, char* argv[]){enqueue(1); printQueue();enqueue(3); printQueue();enqueue(5); printQueue();printf("PEEK : %d\n", peek()); printQueue();printf("POP : %d\n", dequeue()); printQueue();printf("POP : %d\n", dequeue()); printQueue();}} - 원형 큐(Circular Queue) 완성 버전
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495#include <stdio.h>#include <stdlib.h>#define QUE_LEN 5int QUEUE[QUE_LEN];int front = 0;int rear = 0;////// queue의 기본함수 enqueue(), dequeue(), +알파함수 peek()void enqueue(int data){if( (rear + 1) % QUE_LEN == front){printf("Overflow\n");}else{rear = (rear + 1) % QUE_LEN;QUEUE[rear] = data;}}int dequeue(){if(front == rear){printf("Empty\n");return -1;}else{front = (front + 1) % QUE_LEN;return QUEUE[front];}}int peek(){if(front == rear){printf("Empty\n");return -1;}else{return QUEUE[(front + 1) % QUE_LEN];}}////////// queue 추가 함수void initQueue(){front = 0;rear = 0;}int isEmpty(){if(front == rear){return 1; //true}else{return 0; //false}}int isFull(){if( (rear + 1) % QUE_LEN == front){return 1; //true}else{return 0; //false}}void printQueue(){int i=0;printf("front(%2d), rear(%2d) : ", front, rear);int cnt = (rear - front + QUE_LEN) % QUE_LEN;for(i=0; i<cnt; i++){printf("%d ", QUEUE[(front + i + 1) % QUE_LEN]);}printf("\n");}///////// 메인 함수void main(){enqueue(1); printQueue();enqueue(3); printQueue();enqueue(5); printQueue();printf("PEEK : %d\n", peek()); printQueue();printf("POP : %d\n", dequeue()); printQueue();printf("POP : %d\n", dequeue()); printQueue();enqueue(7); printQueue();enqueue(9); printQueue();enqueue(11); printQueue();enqueue(13); printQueue();enqueue(15); printQueue();printf("POP : %d\n", dequeue()); printQueue();printf("PEEK : %d\n", peek()); printQueue();printf("POP : %d\n", dequeue()); printQueue();printf("POP : %d\n", dequeue()); printQueue();printf("POP : %d\n", dequeue()); printQueue();}