Data Structure

큐 (Queue)

studioesso 2020. 4. 23. 22:27

 

선입 선출(FIFO : First-In First-Out)을 기본으로 하는 자료 구조.

먼저 들어온 데이터가 먼저 나가고, 나중에 들어온 데이터가 나중에 나간다.

 

/*
    연결 리스트로 구현된 큐
    코드 출처 : C언어로 쉽게 풀어쓴 자료구조 / 생능출판 / 천인국, 공용해, 하상호 지음 
*/
#include <stdio.h>
#include <malloc.h>

typedef int element;
typedef struct QueueNode {
    element item;
    struct QueueNode *link;
} QueueNode;

typedef struct {
    QueueNode *front, *rear;
} QueueType;

void error(char * message)
{
    fprintf(stderr, "%s\n", message);
    exit(1);
}

void init(QueueType *q)
{
    q->front = q->rear = NULL;
}

int isEmpty(QueueType *q)
{
    return (q->front == NULL);
}

void push(QueueType *q, element item)
{
    QueueNode *temp = (QueueNode *)malloc(sizeof(QueueNode));
    
    if(temp == NULL) error("메모리를 할당할 수 없습니다.");
    else {
        temp->item = item;
        temp->link = NULL;
        
        if(isEmpty(q)) {
            q->front = temp;
            q->rear = temp;
        }
        else {
            q->rear->link = temp;
            q->rear = temp;
        }
    }
}

element pop(QueueType *q)
{
    QueueNode *temp = q->front;
    element item;
    
    if(isEmpty(q)) error("큐가 비어 있습니다");
    else {
        item = temp->item;
        q->front = q->front->link;
        
        if(q->front == NULL) q->rear = NULL;
        
        free(temp);
        return item;
    }
}

element peek(QueueType *q)
{
    if(isEmpty(q)) error("큐가 비어 있습니다");
    else return q->front->item;
}

void main() {
    QueueType q;
    init(&q);
    
    push(&q, 1);
    push(&q, 2);
    push(&q, 3);
    printf("pop() = %d\n", pop(&q));
    printf("pop() = %d\n", pop(&q));
    printf("pop() = %d\n", pop(&q));
}

'Data Structure' 카테고리의 다른 글

트리 (Tree)  (0) 2020.05.05
비트마스크 (Bitmask)  (0) 2020.04.28
스택 (Stack)  (0) 2020.04.22
연결 리스트 (Linked List)  (0) 2020.04.21
힙 (Heap)  (0) 2020.04.19