728x90
배열 기반의 원형 큐 구현
- 구조체 정의
typedef struct _cQueue
{
int front;
int rear;
Data queArr[QUE_LEN];
} CQueue;
- 초기화
-> 원형 큐의 단점을 보완하기 위해 처음에 front와 rear의 위치를 0으로(같게) 초기화
void QueueInit(Queue * pq)
{
pq->front = 0;
pq->rear = 0;
}
- 비어있는지 확인
-> front와 rear가 같으면 비어져있다고 판단
int QIsEmpty(Queue * pq)
{
if(pq->front == pq->rear)
return TRUE;
else
return FALSE;
}
- 데이터 추가
void Enqueue(Queue * pq, Data data)
{
if(NextPosIdx(pq->rear) == pq->front)
{
printf("Queue Memory Error!");
exit(-1);
} // rear + 1 == front라면 꽉 찼다고 판단
pq->rear = NextPosIdx(pq->rear); // rear를 한칸 이동하고
pq->queArr[pq->rear] = data; // 이동한 rear 인덱스에 데이터를 넣음
}
- 다음 인덱스 위치 찾기
int NextPosIdx(int pos)
{
if(pos == QUE_LEN-1) // 마지막 인덱스였다면 0으로
return 0;
else // 아니라면 다음 인덱스로
return pos+1;
}
- 데이터 조회(삭제 O)
-> 스택과 마찬가지로 굳이 비운 인덱스를 초기화해줄 필요는 없음
Data Dequeue(Queue * pq)
{
if(QIsEmpty(pq))
{
printf("Queue Memory Error!");
exit(-1);
}
pq->front = NextPosIdx(pq->front); // front를 한 칸 이동하고
return pq->queArr[pq->front]; // 그 위치의 데이터 반환
}
- 데이터 조회(삭제 X)
-> queue의 front 값은 바꾸지 않고 front 다음 인덱스의 데이터만 반환
Data QPeek(Queue * pq)
{
if(QIsEmpty(pq))
{
printf("Queue Memory Error!");
exit(-1);
}
return pq->queArr[NextPosIdx(pq->front)];
}
728x90
'Programming > Data Structure' 카테고리의 다른 글
열혈 자료구조 - 7-4 덱(Deque)의 이해와 구현 (0) | 2020.12.30 |
---|---|
열혈 자료구조 - 7-3 큐의 연결 리스트 기반 구현 (0) | 2020.12.30 |
열혈 자료구조 - 7-2 큐의 배열 기반 구현(1) (0) | 2020.12.22 |
열혈 자료구조 - 7-1 큐의 이해와 ADT 정의 (0) | 2020.12.21 |
열혈 자료구조 - 6-4. 스택을 활용한 계산기 프로그램 구현(2) (0) | 2020.12.20 |