원형큐에서의 front,rear값은 0으로 초기화하게끔 약속되어있나요?

조회수 1134회

안녕하세요

제게는 교수님과 선생님과 같으신 해쉬코드고수님들 ㅎㅎ

언제나 그랬듯이 부끄럼을 무릎쓰고 물어보겠습니다.


현재 천인국저자 "C언어로 쉽게 풀어쓴 자료구조"라는 책으로 공부 중인데,

154페이지에 이렇게 저술되어있습니다.

원형큐에서는 front와 rear의 개념이 약간 변경된다. 먼저 초기값은 -1이 아닌 0이다.


여기서 제가 포인트로 잡은 것들은 이러합니다.

  1. 스택과 선형큐의 위치지정변수인 top / front,rear가 -1로 초기화되는 이유는 index가 0부터 시작되기 때문이다.
  2. 원형큐에서는 공백과 포화를 구분하기 위해 한 자리를 비워둔다. (그 한자리는 0인 자리이다)

( 제가 잘못 이해한 것들이 있으면 부디 답변부탁드립니다! )

( 책과 비슷한 예제 사진 첨부하겠습니다! )


이미지


제가 궁금한 건 이겁니다.

0자리를 비워둠으로써 front와 rear의 위치차이로

공백상태와 포화상태를 구분할 수 있다고 합시다.

한자리를 비워둘 것이면 그럼 애초에 front와 rear를 -1로 지정하여

index의 시작번호인 0에도 데이터를 삽입할 수 있지 않나요?

그러나 왜 원형큐에서는 front와 rear를 0으로 초기화를 하게하는 겁니까?

한국자료를 뒤져봐도, 영문자료를 구글링해봐도 찾아보기 어렵네요

도와주세요~!

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    배열을 이용한 원형큐에 대한 질문인데요.

    배열을 이용해서 원형큐를 만드는 여러 방법 중의 대표적인 방법 중의 하나가 한칸을 소모해서 코드를 간단하게 하는 방법입니다. 이 방법이 많이 소개되는 방법일 뿐이지 이 방법만 있는 것은 아니다라는 것 기억하시길 바라고요.

    하여튼 이방법의 핵심은 기본 아이디어를 이용할 경우 다 찬 상태와 텅 빈 상태를 구분할 수 없기 때문에, 일부러 한칸 빈 상태를 다 찬 상태로 정의하여 구분할 수 없는 상태를 예방하는 것입니다. 단점은 배열 한칸(즉, 메모리)이 낭비된다는 것이고, 장점은 메모리를 낭비하지만 그 양이 미미한 반면에 코드를 처음 아이디어대로 직관적으로 작성할 수 있다는 것입니다.

    배열을 이용하는 방식이기 때문에 배열 인덱스중 하나가 빈 상태가 되어야 합니다. 따라서 배열 크기가 그림처럼 6이라면 인덱스는 0~5까지 이므로 그중의 하나가 비어야 합니다.

    따라서 질문에서처럼 front와 rear는 -1은 될수 없구요. 0~5중에 하나여야 하고요. 꼭 0일 필요는 없습니다만, 저 중의 하나가 초기값이라면 보통 0을 선택하겠지요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 예를 들어, 꽉찬 상태를 체크하는 코드를 보시면 front의 다음칸이 rear랑 같은지를 체크할 겁니다. 만약 처음에 front와 rear를 -1로 초기화하게되면 계속 값만 넣었을 경우를 가정했을 때 계속해서 증가된 front의 다음값이 절대 -1(이 경우의 rear 값)이 되지 않기 때문에 실행시간 오류가 됩니다. 알 수 없는 사용자 2021.4.13 22:27
  • @cheolsu

    와.. 정말 긴 장문의 답변 정말 정말 감사합니다.

    뼈가 되고 피가 되고 살이 되는 답변이었습니다.

    항상 감사합니다!! ㅎㅎ

    😁

    • 이런 건 댓글로 하시죠. nowp 2021.4.15 12:11

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)