C언어 원형 큐 (Circular Queue)

코딩C언어
읽는데 6분 소요
처음 쓰여진 날: 2026-02-03
마지막 수정일: 2026-02-03
조회수: 25

요약

C언어 원형 큐의 개념, front/rear 포인터, 모듈러 연산을 이용한 순환 구조를 알아봅니다. 정보처리기사 실기에 출제된 원형 큐 문제를 풀기 위한 핵심 개념을 정리합니다.

원형 큐 핵심 정리

개념설명예시
원형 큐배열의 끝과 처음이 연결된 큐SIZE=3이면 [0], [1], [2] 사용
front맨 앞 데이터 위치다음에 나갈 데이터
rear다음 빈 칸 위치새 데이터가 들어갈 자리
모듈러 연산인덱스 순환을 위한 나머지 연산(rear + 1) % 3

원형 큐란?

원형 큐(Circular Queue)배열의 끝과 처음을 연결하여 원형으로 동작하는 입니다.

선형 큐는 데이터를 삭제하면 앞쪽 공간이 비어도 재사용할 수 없습니다. 원형 큐는 이 문제를 해결합니다.

선형 큐와 원형 큐 비교
선형 큐는 앞쪽 공간이 낭비되지만, 원형 큐는 빈 공간을 재사용합니다.

front와 rear 포인터

원형 큐는 두 개의 포인터로 데이터 위치를 관리합니다. 줄 서기로 비유하면 이해하기 쉽습니다.

포인터역할비유
front맨 앞 데이터 위치다음에 서비스 받을 손님
rear다음 빈 칸 위치새 손님이 줄 설 자리
text
코드 하이라이팅 중...

typedef를 사용하면 Queue 타입을 간결하게 정의할 수 있습니다.

c
코드 하이라이팅 중...

어떻게 원형으로 이어지나?

실제 배열은 일렬이지만, 인덱스가 끝에 도달하면 처음으로 돌아가도록 처리합니다.

text
코드 하이라이팅 중...

이 "돌아가기"를 구현하는 것이 모듈러 연산 % SIZE 입니다. 다음 섹션에서 자세히 설명합니다.

원형 큐 개념
배열의 끝([2])에서 다음 칸으로 이동하면 처음([0])으로 돌아갑니다. 이것이 '원형'의 의미입니다.


모듈러 연산 (% SIZE)

원형 큐의 핵심은 모듈러(나머지) 연산입니다. 나머지 연산자 %는 나눗셈의 나머지를 구합니다. 인덱스가 배열 끝에 도달하면 처음으로 돌아갑니다.

c
코드 하이라이팅 중...
현재 인덱스연산결과
0(0 + 1) % 31
1(1 + 1) % 32
2(2 + 1) % 30 (순환)

삽입 (enqueue)

데이터를 삽입하면 rear 위치에 저장하고, rear를 다음 칸으로 이동합니다.

c
코드 하이라이팅 중...
enqueue 동작
enqueue: rear 위치에 값을 저장하고, rear를 다음 위치로 이동합니다.

삽입 예시

c
코드 하이라이팅 중...
동작a[0]a[1]a[2]frontrear
초기00000
enq(1)10001
enq(2)12002

삭제 (dequeue)

데이터를 삭제하면 front 위치의 값을 반환하고, front를 다음 칸으로 이동합니다.

c
코드 하이라이팅 중...
dequeue 동작
dequeue: front 위치의 값을 반환하고, front를 다음 위치로 이동합니다.

삭제 예시

c
코드 하이라이팅 중...
동작반환값a[0]a[1]a[2]frontrear
이전-12002
deq()112012

왜 값을 실제로 지우지 않나요?

dequeue는 배열에서 값을 지우지 않고 front만 이동합니다.

이유설명
효율성값을 0으로 초기화하는 것도 연산입니다. 불필요한 작업은 생략합니다.
덮어쓰기나중에 그 자리에 enqueue하면 새 값으로 덮어씁니다.
위치로 관리"큐에 있다/없다"는 값이 아니라 front/rear 위치로 판단합니다.
text
코드 하이라이팅 중...

비유: 책을 버릴 때 내용을 지우지 않고, "읽을 책 목록"에서 빼는 것과 같습니다.


front == rear이면 빈 큐

front맨 앞 데이터 위치, rear다음 빈 칸 위치입니다. 둘이 같으면 뺄 데이터가 없다는 뜻입니다.

빈 큐 상태
초기 상태와 모든 데이터를 dequeue한 후 모두 front == rear입니다. 넣을 위치와 뺄 위치가 같으면 큐가 비어있습니다.
상태frontrear의미
초기 (빈 큐)00front == rear → 비어있음
enqueue(10) 후01front ≠ rear → 데이터 있음
dequeue() 후11front == rear → 다시 비어있음

실기 문제 풀이 전략

문제 풀이 순서

  1. SIZE 확인: 배열 크기가 몇인지 확인
  2. 초기 상태 표 작성: front, rear, 배열 상태
  3. 연산 순서대로 추적: enq/deq 하나씩 표에 기록
  4. % SIZE 계산 주의: 특히 rear가 SIZE-1일 때 다음 값 확인

문제 유형

유형설명
출력값 묻기deq() 반환값 순서대로 출력
빈칸 채우기enq/deq 함수 내 % SIZE 부분
상태 추적특정 연산 후 front, rear 값

정보처리기사 실기 대비 문제