struct circqueue

 { int front,rear; int capacity; int *array; };


struct circqueue *q(int size)

 { struct circqueue *q=malloc(sizeof(struct circqueue));

if(!q)

 return NULL;

q->capacity=size;

q->front=-1; q->rear=-1;

q->array=malloc(q->capacity*sizeof(int));

if(!q->array)return NULL;

return q; }


void enqueue(struct circqueue *q,int x)

 { if(isfullqueue(q)) printf("queue overflow\n");

else{ q->rear=(q->rear+1)%q->capacity;

q->array[q->rear]=x;

if(q->front==-1) { q->front=q->rear; }

   }

}


capacity를 4로 하고 처음 넣는걸로 가정 즉 front와 rear가 -1이라고 하면요

enqueue에서 빨간글씨 표시한 코드로 인해서 rear=4가 되는데

array[4]=x 하면 capacity가 4인데 용량이 넘어가잖아요.

array[3]=x 하면 이해가 되거든요 뒤에서 채우니까.

이거좀 알려주세요

      q->rear=(q->rear+1)%q->capacity;

제가 이 부분을 저만의 기적의 계산법으로 해서 rear가 4가 나오는건가요?