# 원형 큐
Queue.cpp
큐는FIFO(First-In First-Out)라고하는 선입 선출의 자료구조이다.
일반 배열을 사용한 큐는 배열의 앞부분이 비어있더라도 사용하지 못하는 단점이 있고 이를 보안하기 위해
대량의 데이터 이동을 하여야 하는 반면 원형큐는 배열을 원형의 구조로 만듬으로써 메모리 낭비를 줄일수 있다.
Queue.cpp
큐는FIFO(First-In First-Out)라고하는 선입 선출의 자료구조이다.
일반 배열을 사용한 큐는 배열의 앞부분이 비어있더라도 사용하지 못하는 단점이 있고 이를 보안하기 위해
대량의 데이터 이동을 하여야 하는 반면 원형큐는 배열을 원형의 구조로 만듬으로써 메모리 낭비를 줄일수 있다.
#include <stdio.h>
#define MAX_QUEUE_SIZE 100
typedefstruct{
int queue[MAX_QUEUE_SIZE];
int front,rear;
}QueueType;
void Init(QueueType *q)
{
q->front = q->rear = 0;
}
int is_empty(QueueType *q)
{
return (q->front == q->rear);
}
int is_full(QueueType *q)
{
return ((q->rear+1) % MAX_QUEUE_SIZE == q->front);
// rear의 다음칸이 front라면 포화상태
}
void Enqueue(QueueType *q,int data)
{
if(is_full(q))
{
printf("큐가 포화상태 입니다\n");
return ;
}
q->rear=(q->rear+1)%MAX_QUEUE_SIZE; // rear의 값은 0~99 유지
q->queue[q->rear]=data;
}
int Dequeue(QueueType *q)
{
if(is_empty(q))
{
printf("큐가 공백상태 입니다.\n");
return -1;
}
q->front=(q->front+1)%MAX_QUEUE_SIZE; // front의 값은 0~99 유지
return q->queue[q->front]; // 삭제 데이터 반환
}
int Peek(QueueType *q)
{
if(is_empty(q))
{
printf("큐가 공백상태 입니다.\n");
return -1;
}
return q->queue[q->rear];
}
int main()
{
QueueType q;
int i;
Init(&q);
for(i=0;i<10;i++)
{
Enqueue(&q,i+10);
printf("Enqueue() : data = %d, front = %d, rear = %d\n",Peek(&q),q.front,q.rear);
}
puts("-------------------------------------------");
for(i=0;i<10;i++)
printf("Dequeue() : data =%d, front = %d, rear = %d\n",Dequeue(&q),q.front,q.rear);
puts("-------------------------------------------");
printf("현재 상태 : front = %d, rear = %d\n",q.front,q.rear);
return0;
}
'컴퓨터 기술 > 자료구조' 카테고리의 다른 글
자료구조 :: 큐(3) double-ended-queue (0) | 2010.06.26 |
---|---|
자료구조 :: 큐(2) 연결된 큐 (0) | 2010.06.26 |
자료구조 :: 스택(5) 스택을 이용한 미로찾기 (0) | 2010.06.22 |
자료구조 :: 스택(4) 스택을 이용한 표기식 변환과 연산 (0) | 2010.06.22 |
자료구조 :: 스택(3) 배열 스택을 이용한 괄호검사 (0) | 2010.06.22 |
댓글 로드 중…