C언어 원형 큐 (Circular Queue)

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

요약

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

원형 큐 핵심 정리

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

원형 큐란? 쌩기초

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

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

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

front와 rear 포인터 쌩기초

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

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

typedef를 사용하면 구조체에 별명을 붙여서 Queue라는 짧은 이름으로 쓸 수 있습니다.

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

{{0}, 0, 0}에서 안쪽 {0}은 배열 a를 모두 0으로 초기화하고, 나머지 0, 0frontrear를 각각 0으로 설정합니다.

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

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

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

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

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


모듈러 연산 (% SIZE) 기초

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

#define SIZE 3은 코드에서 SIZE가 나올 때마다 3으로 바꾸라는 뜻입니다. 자세한 내용은 전처리기를 참고하세요.

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

삽입 (enqueue) 기초

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

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

Queue* q*포인터를 뜻합니다. 큐의 원본을 직접 수정하기 위해 주소를 받는 것입니다. ->는 포인터로 구조체 멤버에 접근하는 화살표 연산자입니다. q->rear는 "q가 가리키는 큐의 rear"라는 뜻입니다.

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 값

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

관련 글

(34개)
제목태그시험
C언어 구조체 배열
C언어
-
C언어 구조체 포인터
C언어
-
C언어 함수 프로토타입
C언어
-