소개
이 프로젝트에서는 C 언어로 큐 (queue) 자료 구조를 구현하는 방법을 배우게 됩니다. 큐는 컴퓨터 과학에서 널리 사용되며, 예를 들어 컴퓨터에서 데이터를 전송하는 데 사용되는 메시지 큐 (message queue) 에 활용됩니다.
👀 미리보기
$ gcc queue.c -o queue
$ ./queue
11250
🎯 과제
이 프로젝트에서 다음을 배우게 됩니다:
- 큐의 첫 번째 요소 값을 반환하는
front()메서드를 구현하는 방법 - 큐에서 첫 번째 요소를 제거하고 반환하는
pop()메서드를 구현하는 방법 - 현재 큐에 있는 요소의 수를 반환하는
count()메서드를 구현하는 방법 - 큐가 비어 있는지 확인하는
is_empty()메서드를 구현하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다:
- 큐 자료 구조의 기본 연산을 이해할 수 있습니다.
- C 언어로 큐의 핵심 메서드를 구현할 수 있습니다.
- 큐에 대한 지식을 실제 문제 해결에 적용할 수 있습니다.
front() 메서드 구현
이 단계에서는 큐의 front() 메서드를 구현하는 방법을 배우게 됩니다.
front() 메서드는 큐의 첫 번째 요소 값을 반환해야 합니다. 큐가 비어 있는 경우, 이 메서드는 exit(-1)로 프로그램을 종료해야 합니다.
이 단계를 완료하려면 다음 단계를 따르세요:
/home/labex/project/queue.c에 위치한queue.c파일을 엽니다.- 코드에서
front()메서드를 찾습니다. - 다음과 같이
front()메서드를 구현합니다:
static int front() {
if(!phead) {
exit(-1);
}
return phead->val;
}
front() 메서드는 먼저 phead 포인터가 NULL인지 확인하여 큐가 비어 있는지 확인합니다. 큐가 비어 있으면, 이 메서드는 exit(-1)로 프로그램을 종료합니다.
큐가 비어 있지 않은 경우, 이 메서드는 큐의 첫 번째 요소를 나타내는 phead 노드에 저장된 값을 반환합니다.
pop() 메서드 구현
이 단계에서는 큐의 pop() 메서드를 구현하는 방법을 배우게 됩니다.
pop() 메서드는 큐에서 첫 번째 요소를 제거하고 반환해야 합니다. 큐가 비어 있는 경우, 이 메서드는 exit(-1)로 프로그램을 종료해야 합니다.
이 단계를 완료하려면 다음 단계를 따르세요:
/home/labex/project/queue.c에 위치한queue.c파일을 엽니다.- 코드에서
pop()메서드를 찾습니다. - 다음과 같이
pop()메서드를 구현합니다:
static int pop() {
if(!phead) {
exit(-1);
}
int val = phead->val;
phead = phead->next;
return val;
}
pop() 메서드는 먼저 phead 포인터가 NULL인지 확인하여 큐가 비어 있는지 확인합니다. 큐가 비어 있으면, 이 메서드는 exit(-1)로 프로그램을 종료합니다.
큐가 비어 있지 않은 경우, 이 메서드는 큐의 첫 번째 요소를 나타내는 phead 노드의 값을 저장합니다. 그런 다음, phead 포인터를 다음 노드로 업데이트하여 큐에서 첫 번째 요소를 효과적으로 제거합니다. 마지막으로, 이 메서드는 저장된 값을 반환합니다.
count() 메서드 구현
이 단계에서는 큐의 count() 메서드를 구현하는 방법을 배우게 됩니다.
count() 메서드는 현재 큐에 있는 요소의 수를 반환해야 합니다.
이 단계를 완료하려면 다음 단계를 따르세요:
/home/labex/project/queue.c에 위치한queue.c파일을 엽니다.- 코드에서
count()메서드를 찾습니다. - 다음과 같이
count()메서드를 구현합니다:
static int count() {
int cnt = 0;
for(struct node* p = phead; p; p=p->next) {
cnt++;
}
return cnt;
}
count() 메서드는 cnt 변수를 0 으로 초기화합니다. 그런 다음, phead 노드와 그 후속 노드의 next 포인터를 따라 큐를 순회합니다. 각 노드를 만날 때마다 cnt 변수를 증가시킵니다. 마지막으로, 이 메서드는 큐에 있는 요소의 수를 나타내는 cnt 값을 반환합니다.
is_empty() 메서드 구현
이 단계에서는 큐의 is_empty() 메서드를 구현하는 방법을 배우게 됩니다.
is_empty() 메서드는 큐가 비어 있으면 1 을 반환하고, 그렇지 않으면 0 을 반환해야 합니다.
이 단계를 완료하려면 다음 단계를 따르세요:
/home/labex/project/queue.c에 위치한queue.c파일을 엽니다.- 코드에서
is_empty()메서드를 찾습니다. - 다음과 같이
is_empty()메서드를 구현합니다:
static int is_empty() {
return phead == NULL;
}
is_empty() 메서드는 단순히 phead 포인터가 NULL인지 확인하여 큐가 비어 있는지 확인합니다. phead가 NULL이면, 이 메서드는 1 을 반환하여 큐가 비어 있음을 나타냅니다. 그렇지 않으면 0 을 반환하여 큐가 비어 있지 않음을 나타냅니다.
축하합니다! 이제 큐 데이터 구조에 필요한 모든 메서드를 구현했습니다. 이제 프로그램을 컴파일하고 실행하여 큐의 기능을 테스트할 수 있습니다.
- 컴파일 및 실행:
$ gcc queue.c -o queue
$ ./queue
00000
예상 출력은 다음과 같습니다:
$ gcc queue.c -o queue
$ ./queue
11250
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



