반응형
사용자가 정수를 입력하면 원형 큐에 삽입한다. 입력받은 정수가 -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");
}
모든 함수에 주석을 달아놓았습니다. 혹시 이해가 가지 않는부분을 물어봐주세요.
반응형
'혼자 공부하는 것들 > 자료구조(c언어)' 카테고리의 다른 글
C) 순차탐색(sequential search) 구현하기 (0) | 2020.07.18 |
---|---|
C)주어진 파일 문서에 포함된 각 단어별 빈도 수를 출력하는 프로그램 작성(이진트리 사용) (0) | 2020.07.18 |
C)전위(preorder), 중위(inorder), 후위(postorder)순회 트리 구현 (0) | 2020.07.18 |
C)복소수를 구조체로 표현해보기, 복소수 덧셈 계산 (0) | 2020.07.17 |
C)Link List 구현 (0) | 2020.07.17 |
댓글