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; }
int queuesize(struct circqueue *q)
{ return(q->capacity-q->rear+q->front+1)%q->capacity; }
void enqueue(struct circqueue *q,int x)
{ if(isfullqueue(q)) printf("queue overflown");
else{ q->rear=(q->rear+1)%q->capacity;
q->array[q->rear]=x;
if(q->front==-1) { q->front=q->rear; }
}
}
저 큐사이즈 뭐하는 함수임?
capacity를 4로 두고 비어있다고 가정 즉 rear랑 front가 -1임
4 - (-1) + (-1) + 1 % 4 = 1 이잖음
큐사이즈 1이 뭘 의미하는겨 비었다고 0을 말해주는것도 아니고
꽉 채웠다고 치면 front=0이고, rear=3이 되는데
4 - (3) + 0 + 1 % 4 = 2 잖음. 꽉채웠다고 4를 말해주는것도 아니고 1이랑 2가 도대체 뭐임.
그리고 내 책에는
q->capacity-q->rear+q->front+1)%q->capacity 가 아니라
q->capacity-q->front+q->rear+1)%q->capacity 로 돼있음
근데 책으로 해도 의문인게
비었다고 쳤을때 똑같이 1 반환하고
꽉찼다고 쳤을때는 0을 반환함.
그래서 뭔 지 몰겠음
또 나만의 기적의 계산법이 들어간건가
서큘러 큐는 꽉찬거 빈거 구분하기위해서 보통 n-1번이면 꽉찬걸로하지않냐
윤성우행님이 알려줬다
카파서티가 4면 4번 해야 꽉찬거지 array[3]이랑 헷갈린거아님?
아 배열이구낭헿