본문 바로가기
혼자 공부하는 것들/자료구조(c언어)

C)원형 큐(queue)에 자료 삽입 및 삭제

by applepick 2020. 7. 18.
반응형

사용자가 정수를 입력하면 원형 큐에 삽입한다. 입력받은 정수가 -1이 아니면 계속 입력을 받는다.

-1을 입력받으면 삽입을 멈추고 원형 큐에있는 자료를 순차적으로 삭제하여 출력한다. (즉, 원형 큐가 비게 될 때까지 삭제 및 출력을 한다.)

 

#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE  5 //큐의 사이즈를 임의로 설정하였다.

typedef int element;
typedef struct{
    element quesue[MAX_QUEUE_SIZE];
    int front,rear;
}QueueType;

int is_empty(QueueType *q) //만약 머리와 꼬리부분이 같으면 return을 해준다.
{
    return (q->front == q->rear);
}

int is_full(QueueType *q) //큐가 모두 찼을때를 return 해준다.
{
    return ((q->rear+1)%MAX_QUEUE_SIZE == q->front);
}

void init_queue(QueueType *q) //큐의 초기화 함수
{
    q->front = q->rear = 0;
}

void enqueue(QueueType *q, element item) //입력받은 값을 큐에 삽입함수
{
  	if( is_full(q) ) {
		fprintf(stderr, "Queue Full\n");
		return;
  	}
    q->rear = (q->rear+1)%MAX_QUEUE_SIZE;
    q->quesue[q->rear] = item;
}

element dequeue(QueueType *q)   //큐를 삭제하는 함수
{
   	if( is_empty(q) ) {
		fprintf(stderr, "Queue Empty\n");
		exit(1);
   	}
	q->front = (q->front+1)%MAX_QUEUE_SIZE;
	return q->quesue[q->front];
}

int main()
{
    element     a;
    QueueType   q;
    /// 큐 초기화
    init_queue(&q);

   /// 사용자로부터 정수를 입력받아 큐에 삽입
    do {
        scanf("%d", &a);
        if (a == -1)
            break;
        enqueue(&q,a);
    } while (1);

    /// 큐에 자료들을 하나씩 삭제하여 출력 (큐가 빌 때까지)
    while(!is_empty(&q))
    {
        a = dequeue(&q);
        printf("%d ",a);
    }
    printf("\n");
}

모든 함수에 주석을 달아놓았습니다. 혹시 이해가 가지 않는부분을 물어봐주세요.

반응형

댓글