본문 바로가기

Programming Study/자료구조

큐(Queue)

큐의 정의

  - 선형리스트에서 한쪽에서는 삽입연산이 반대쪽에서는 삭제 연산이 이루어지도록 한 것.

  - 가장 먼저 삽입된 데이터가 가장 먼저 삭제되는 성질을 갖는다. < FIFO(First-In-First-Out) >

  - rear : 큐에서 데이터의 삽입이 이루어지는 쪽, 가장 최근에 삽입된 데이터의 위치를 가리킴.

  - front : 큐에서 데이터의 삭제가 이루어지는 쪽, 가장 최근에 삭제된 데이터의 위치를 가리킴.

 

큐의 기본 연산 

 

큐의 생성

 #define QUEUE_SIZE 100

typedef struct

{

    char *item1[20]

    int item2;

    ···············

}Element;

 

Element queue[QUEUE_SIZE];

int rear = -1;     // 최초 생선된 큐는 공백 상태이므로 rear = -1

int front = -1;    // 최초 생선된 큐는 공백 상태이므로 front = -1

 

큐의 포화/공백 상태 검사 함수 

bool IsFull(int rear)

{

    if(rear == QUEUE_SIZE -1) return true;    //포화상태

    else return false;

}

 

bool IsEmpty(int front, int rear)

{

    if(front == rear) return true;    //공백 큐 상태

    else return false;                // 공백이 아닌 큐 상태

}

 

큐의 삽입/삭제 함수

void Enqueue(int *rear, Element item)    //삽입

{

    if(IsFull(*rear))    //큐의 포화상태 검사

    {

        queue_full();    // 포화 상태인 경우

        return;

    }

    queue[++(*rear)] = item;    // rear의 값을 증가시킨 후 item 삽입

}

 

Element Dequeue(int *front, int rear)    //삭제

{

    if(IsEmpty(*front, rear))    //큐의 공백 상태 검사

    {

        return queue_empty();    //공백 상태인 경우 오류 키 반환

    }

    return queue[++(*front)];    //front값을 증가 후 반환

}

 

'Programming Study > 자료구조' 카테고리의 다른 글

리스트 - 원형 연결 리스트(Circular Linked List)  (0) 2014.09.02
리스트 - 단순 연결 리스트(Simply Linked List)  (0) 2014.09.02
리스트(List)  (0) 2014.09.02
스택(stack)  (0) 2014.09.01
자료구조의 구분  (0) 2014.09.01