미누에요
[자료구조] 연결리스트를 통한 큐(Queue) 구현 - C 본문
728x90
반응형
SMALL
큐(Queue)
위 이미지와 같이 들어온 순서대로 나가게 되는 자료구조이다.
First In First Out의 구조를 갖는다.
각 함수에 대해서 간략히 설명하고 넘어가겠다.
isEmpty()
큐가 비어있는지 검사하는 함수
- 비어있으면 1 반환
- 비어있지 않으면 0 반환
isFull()
큐가 가득 차있는지 검사하는 함수
- 연결리스트는 계속해서 확장할 수 있으므로 isFull함수를 사용하지 않는다.
Enqueue()
큐에 새로운 데이터를 삽입하는 함수
- 새로운 노드를 생성하여 데이터를 저장하고, 그 새로운 노드와 head 노드를 연결한다.
Dequeue()
큐에 있는 데이터를 삭제, 반환하는 함수
- 가장 처음 들어온 노드의 값을 찾아 반환해야한다.
- 이전 노드의 위치도 기억해야 하므로 prev 포인터 노드와 temp 포인터 노드 두 개 사용
소스코드
#include<stdio.h>
#include<stdlib.h>
typedef struct _queue
{
int data;
struct _queue *link;
}Queue;
int isEmpty(Queue* head){
return (head == NULL);
}
void Enqueue(Queue** head, int data){
Queue *newnode = (Queue *)malloc(sizeof(Queue));
newnode->data = data;
newnode->link = *head;
*head = newnode;
}
int Dequeue(Queue** head){
if(isEmpty(*head)){
printf("큐가 비어있습니다!\n");
exit(1);
}
Queue *temp = *head;
Queue *prev = NULL;
while(temp->link != NULL){
prev = temp;
temp = temp->link;
}
int return_data = temp->data;
if(prev == NULL){
*head = NULL;
} else {
prev->link = NULL;
}
free(temp);
return return_data;
}
int main(void){
Queue *head = NULL;
Enqueue(&head, 10);
Enqueue(&head, 20);
Enqueue(&head, 30);
printf("Dequeued: %d\n", Dequeue(&head));
printf("Dequeued: %d\n", Dequeue(&head));
printf("Dequeued: %d\n", Dequeue(&head));
return 0;
}
실행 결과
728x90
반응형
LIST
'자료구조' 카테고리의 다른 글
[자료구조] 원형 배열 큐를 이용해 전위식 계산하기 - C (0) | 2024.08.08 |
---|---|
[자료구조] 스택을 이용해 중위식을 후위식으로 변환하기 (0) | 2024.08.07 |
[자료구조] 연결리스트를 통한 스택(Stack) 구현 - C (0) | 2024.07.31 |
[자료구조] 전위, 중위, 후위 표기법 (0) | 2024.05.26 |
[자료구조] 윤성우의 열혈 자료구조 08-2 중위 표기법의 소괄호 문제풀이 (0) | 2024.05.19 |