메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

p121 순환 큐에서 예제에서 질문이요.

2010-02-15

|

by chunlangs

2648

CircularQueue에서

while ( CQ_IsFull( Queue ) == 0 )
{
      printf(" %d를 삽입합니다.\n", i);
                
      CQ_Enqueue( Queue, i++ );
    }

이 부분에 i가 107일때

  CQ_Enqueue( Queue, i++ );
      Queue->Rear부분이 11이 되어 이 함수를 호출할 때 0으로 돌아가버리는데요;
그래서 결국 107값은 입력이 안되는 데;  

void        CQ_Enqueue( CircularQueue* Queue, ElementType Data)
{
        int Position = 0;
        
        if(Queue->Rear == Queue->Capacity + 1)
        {
                Queue->Rear = 0;
                Position  = 0;
        }
        else
        {
                Position = Queue->Rear++;
                Queue->Nodes[Position].Data = Data;
        }
}
사실 여기서 if부분에서 0으로 돌아갈 때의 Data값도 배열에 입력을 해야하지 않나요? 따로 설정을 안하신 이유가 있으신가요?

그리고 순환 큐에서

3장 큐의 맨 마지막 이것만은 알고 갑시다. 에서요.  전단과 후단의 위치가 공백상태가 되잖아요.

만약  p112의 오른쪽 그림과 같이  포화상태의 큐에서 삽입 연산을 한다면, 후단 Queue->Rear의 값이 0이 되어

전단과 후단이 서로 일치하게 되지 않나요????

~~ 이점 정말 궁금하네요. 꼭!~~ 답변 부탁드려요.
댓글 입력