정처기 감자정처기 감자
C언어자료구조

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

C언어 원형 큐 (Circular Queue)

코딩C언어
읽는데 10분 소요
처음 쓰인 날: 2026-02-03
마지막 수정일: 2026-03-21
조회수: —
선수학습(1개)
  • C언어 큐 (Queue) - FIFO 자료구조

요약

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

원형 큐 핵심 정리

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

원형 큐란?

원형 큐 개념을 몰라도 문제는 풀 수 있습니다
실기 문제를 풀기 위해 원형 큐를 깊이 이해할 필요는 없습니다. typedef, 포인터와 주소, 나머지 연산자(%)만 알면 코드를 따라가며 풀 수 있습니다. 하지만 원형 큐를 알고 있으면 훨씬 쉽게 문제를 풀 수 있으니 참고하는 걸 추천합니다.

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

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

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

front와 rear 포인터

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

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

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

c
코드 하이라이팅 중…

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

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

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

text
코드 하이라이팅 중…

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

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

모듈러 연산 (% SIZE)

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

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

c
코드 하이라이팅 중…
현재 인덱스연산결과
0(0 + 1) % 31
1(1 + 1) % 32
2(2 + 1) % 30 (순환)
% SIZE가 순환의 핵심입니다
모듈러 연산 덕분에 인덱스가 SIZE를 넘어가지 않고 0으로 돌아옵니다. 이것이 '원형'의 비밀입니다.

삽입 (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 값

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

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어41개
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어 이진 트리 (Binary Tree)
C언어코딩C언어
2026-04-24-
C언어 중첩 구조체와 포인터 접근
C언어코딩C언어
2026-04-24-
C언어 함수 포인터 (Function Pointer)
C언어코딩C언어
2026-04-24-
배열 C언어 코딩 감자시험
감자시험C언어배열감자시험
2026-03-28응시
C언어 왕감자 정보처리기사 실기 모의 시험
C언어C언어
2026-03-27응시
제어문/반복문 C언어 코딩 감자시험
감자시험C언어제어문반복문
2026-03-28응시
연산자 C언어 코딩 감자시험
감자시험C언어연산자감자시험
2026-03-28응시
포인터 C언어 코딩 감자시험
감자시험C언어포인터감자시험
2026-03-28응시
문자열 C언어 코딩 감자시험
감자시험C언어문자열감자시험
2026-03-28응시
구조체 C언어 코딩 감자시험
감자시험C언어구조체감자시험
2026-03-28응시
C언어 구조체 배열
C언어코딩C언어
2026-03-21-
C언어 구조체 포인터
C언어코딩C언어
2026-04-24-
C언어 함수 프로토타입
C언어코딩C언어
2026-03-21-
C언어 입력 함수 - scanf, getchar, gets
C언어코딩C언어
2026-03-21-
C언어 출력 함수 - putchar, printf, puts
C언어코딩C언어
2026-09-29-
C언어 문자열 포인터 (char *)
C언어코딩C언어
2026-03-21-
C언어 포인터 산술 (Pointer Arithmetic)
C언어코딩C언어
2026-03-21-
C언어 재귀함수 (Recursion)
C언어코딩C언어
2026-03-21-
C언어 선택정렬 (Selection Sort)
C언어코딩C언어
2026-02-10-
C언어 스택 (Stack) - LIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 2차원 배열
C언어코딩C언어
2026-03-21-
C언어 ctype.h 문자 판별 함수
C언어코딩C언어
2026-03-21-
C언어 자료형
C언어코딩C언어
2026-05-15-
C언어 이중 포인터 (Double Pointer)
C언어코딩C언어
2026-03-21-
C언어 동적 메모리 할당 (malloc, free)
C언어코딩C언어
2026-05-04-
C언어 헤더 파일과 #include
C언어코딩C언어
2026-03-21-
C언어 연결 리스트 (Linked List)
C언어코딩C언어
2026-05-06-
C언어 포인터 배열과 2차원 배열
C언어코딩C언어
2026-03-24-
C언어 포인터의 기초
C언어코딩C언어
2026-06-25-
C언어 큐 (Queue) - FIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 static 변수 - 값이 유지되는 변수
C언어코딩C언어
2026-03-21-
C언어 포인터를 이용한 문자열 복사
C언어코딩C언어
2026-07-09-
C언어 문자열 뒤집기 (포인터 활용)
C언어코딩C언어
2026-03-21-
C언어 구조체
C언어코딩C언어
2026-03-20-
C언어 삼항 연산자
C언어코딩C언어
2026-03-21-
C언어 typedef - 자료형에 새 이름 붙이기
C언어코딩C언어
2026-03-21-
전설의 완전수 문제 - C언어
C언어코딩C언어
2025-09-12-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999