//////
Search
📒

Dequeue(With RoundArray)

1. 소스코드

#include <stdio.h> #include <stdlib.h> // 원형 큐 구조체 정의 typedef struct { int *array; int front; int rear; int size; int capacity; } CircularQueue; // 큐 초기화 함수 CircularQueue* createQueue(int capacity) { CircularQueue* queue = (CircularQueue*)malloc(sizeof(CircularQueue)); queue->capacity = capacity; queue->front = queue->size = 0; queue->rear = capacity - 1; queue->array = (int*)malloc(queue->capacity * sizeof(int)); return queue; } // 큐가 비었는지 확인 int isEmpty(CircularQueue* queue) { return (queue->size == 0); } // 큐가 가득 찼는지 확인 int isFull(CircularQueue* queue) { return (queue->size == queue->capacity); } // 큐의 크기 두 배로 늘리기 void resizeQueue(CircularQueue* queue) { int newCapacity = queue->capacity * 2; int *newArray = (int*)malloc(newCapacity * sizeof(int)); // 원형 큐의 요소를 새로운 배열로 복사 for (int i = 0; i < queue->size; i++) { newArray[i] = queue->array[(queue->front + i) % queue->capacity]; } free(queue->array); queue->array = newArray; queue->capacity = newCapacity; queue->front = 0; queue->rear = queue->size - 1; } // 큐에 원소 추가 (enQueue) void enQueue(CircularQueue* queue, int item) { if (isFull(queue)) { printf("큐가 가득 찼습니다. 크기를 두 배로 늘립니다.\n"); resizeQueue(queue); } queue->rear = (queue->rear + 1) % queue->capacity; queue->array[queue->rear] = item; queue->size += 1; printf("%d 추가됨\n", item); } // 큐에서 원소 제거 (deQueue) int deQueue(CircularQueue* queue) { if (isEmpty(queue)) { printf("큐가 비었습니다.\n"); return -1; } int item = queue->array[queue->front]; queue->front = (queue->front + 1) % queue->capacity; queue->size -= 1; return item; } // 큐의 front 원소 확인 int front(CircularQueue* queue) { if (isEmpty(queue)) { return -1; } return queue->array[queue->front]; } // 큐의 rear 원소 확인 int rear(CircularQueue* queue) { if (isEmpty(queue)) { return -1; } return queue->array[queue->rear]; } // 큐의 내용 출력 void printQueue(CircularQueue* queue) { if (isEmpty(queue)) { printf("큐가 비어 있습니다.\n"); return; } int i = queue->front; printf("큐 내용: "); for (int count = 0; count < queue->size; count++) { printf("%d ", queue->array[i]); i = (i + 1) % queue->capacity; } printf("\n"); } // 메모리 해제 void freeQueue(CircularQueue* queue) { free(queue->array); free(queue); } int main() { CircularQueue* queue = createQueue(5); enQueue(queue, 10); enQueue(queue, 20); enQueue(queue, 30); enQueue(queue, 40); enQueue(queue, 50); printQueue(queue); enQueue(queue, 60); enQueue(queue, 70); printQueue(queue); printf("deQueue: %d\n", deQueue(queue)); printf("deQueue: %d\n", deQueue(queue)); printQueue(queue); freeQueue(queue); return 0; }
C
복사

2. 실행결과

3. 고찰

없습니다.