본문 바로가기
카테고리 없음

큐 - 구조체를 이용하여 여러개의 큐 구현하기

by 양초털이범 2020. 7. 22.

구조체를 이용한 큐의 구현


https://candletheif.tistory.com/11

 

큐 큐는 데이터를 FIFO(First In First Out) 원칙에 의해 삽입하거나 삭제하는 자료구조를 말합니다. 큐에 데이터가 삽입 되는 것을 enqueue라 부르고, 삭제하는 것을 dequeue라 부릅니다. -enqueue(value): 큐의

candletheif.tistory.com

지난번엔 일반적인 배열을 이용하여 큐를 구현하였습니다.

 

하지만 일반적인 배열을 이용하여 구현한 큐는 두 개 이상의 큐를 구현할 때엔 적합하지 않습니다.

큐를 제어하는 변수 front와 rear가 하나씩 밖에 없어 여러개의 큐에사용할 수 없기 때문입니다.

그래서 오늘은 구조체를 이용하여 큐 배열과 front와 rear를 구조체로 묶어 여러 큐를 구현해보도록 하겠습니다.

 

구현


#define N 1024

//구조체를 이용하여 queue와 front rear 선언
struct queue {
	int que[N];
	int front;
	int rear;
};

//각 배열별로 제어해주기 위해 front rear를 초기화
void initQueue(queue* q) {
	q->front = 0;
	q->rear = 0;
}

//queue의 사이즈를 출력
int size(queue* q) {
	return q->front - q->rear;
}

//queue가 비었는지 확인
bool isEmpty(queue* q) {
	if (q->front == q->rear)
		return true;
	else
		return false;
}

//queue가 꽉 찼는지 확인
bool isFull(queue* q) {
	if ((q->rear + 1) % N == q->front)
		return true;
	else
		return false;
}

//queue에 값 삽입
void enqueue(queue* q, int v) {
	if(isFull(q))
		cout << "큐가 꽉 차있습니다.\n";
	else {
		q->que[q->rear] = v;
		q->rear = (q->rear + 1) % N;
	}
}

//큐의 맨 앞 값 빼며 출력
int dequeue(queue* q) {
	if (isEmpty(q))
		cout << "큐가 비어있습니다.\n";
	else {
		q->front = (q->front + 1) % N;
		return q->que[q->front - 1];
	}
}

//큐의 맨 앞 값 출력
int Front(queue* q) {
	if (isEmpty(q)) 
		cout << "큐가 비어있습니다.\n";
	else
		return q->que[q->front];

}

int main(){
	queue a;
	queue b;

	int c = 0;

	initQueue(&a);
	initQueue(&b);

	for (int i = 1; i < 6; i++) {
		enqueue(&a, i);
		enqueue(&b, i*2);

	}

	//dequeue
	cout << "dequeue(a): " << dequeue(&a) << "\n";
	cout << "dequeue(b): " << dequeue(&b) << "\n";

	cout << "\n";

	//dequeue를 한 후의 front 확인
	cout << "Front(a): " << Front(&a) << "\n";
	cout << "Front(b): " << Front(&b) << "\n";

}

 

결과

구조체를 이용하여 큐 a, b를 선언한후 각각의 제어를 하는 코드입니다.

 

구조체를 통해 각 front와 rear가 다르게 설정되어 있어 여러개의 큐를 제어 할 수 있습니다. 

댓글