aiccstudy Blog

[C언어 자료구조]원형큐 실습 보고서 과제 본문

c언어

[C언어 자료구조]원형큐 실습 보고서 과제

aiccstudy 2024. 6. 20. 12:41

원형 큐 코드가 시작할 때 #define MAX_QUEUE_SIZE 5로 시작하는데 여기서 MAX_QUEUE_SIZE는 기호 함수이다. typeedef int element;부터 QueueType;까지는 동일하다.

,오류 함수로 void error(char *message)부터 exit (1);까지도 동일한걸 알 수 있다.

 

공백 상태 검출 함수로 void init_queue(QueueType *q) { p->front = q -> rear = 0; }이 구현되어있는데 이는 초기화 함수로 1로 처리되어있던 것이 0으로 처리되어있다.

0으로 초기화된 것을 보면 조금 다른걸 수 있다.

 

,공백 상태 검출 함수 중 return(q->front == q-> rear);은 위의 첫 번째 공백상태 검출 함수랑 공백상태가 유사한걸 알 수 있다. (q->front == q-> rear);조건은 요소가 아무것도 남아있지 않아서 empt상태면 underflow가 발생 할수 있다.

 

포화 상태 검출 함수로 int is_full(QueueType *q) { return ((q->rear+1)% MAX_QUEUE_SIZE == q->front); } MAX_QUEUE_SIZE를 나눈다. 나누는 이유는 % 나머지 연산자이고,나머지 연산자로 인해 포인트가 증가한다. 이 이유로 인덱스가 순환된다.

 

다음으로 원형 큐 출력 함수가 출력되어 있는데 크게 문제가 없다. 그리고 삽입 함수가 출력되어있는데, 삽입 함수는 조금 다르다. q->rear = (q->rear +1)% MAX_QUEUE_SIZE;MAX_QUEUE_SIZE를 나머지 연산으로 나눠서 q->rear로 레어 포인터를 조정한다.

q->data[q->rear] = item; 은 조정된 포인터에서 아이템을 사용한다는 것을 뜻한다.

 

이 다음으로 삭제 함수가 출력되어 있지만 dequeue도 마찬가지로 q->front = (q->front +1)% MAX_QUEUE_SIZE; 조종 순환하고, return q->data[q->front];은 리턴한다. , 포인터의 기초에서 데이터를 추출한다는 것을 뜻한다.

 

원형코드 끝 주석으로 int main(void) { QueueType queue; int element; 가 있다.

이것은 초기화를 뜻한다. intit_queue(&queue); printf(“--데이터 추가 단계--n”); while (!is_full(&queue)) full이 아닌 동안에 추가할 수 있다는 내용이다. { printf(“정수를 입력하시오:”); scanf(“%d”,&element); element는 키보드가 입력하는 동안에 삽입 한다는 것을 뜻한다. printf(“큐는 포화상태입니다.nn”); 는 큐는 포화상태라는 것을 알 수 있다.

printf(--데이터 삭제 단계--n”); while(!is_empty(&queue)) 데이터 삭제 단계를 말한다.

 

실행 결과로는 아래처럼 뜬다.

--데이터 추가 단계--

정수를 입력하시오:10

QUEUE(front=0 rear=1) = 10 I

정수를 입력하시오:20

QUEUE(front=0 rear=2) = 10 I 20 I

정수를 입력하시오:30

QUEUE(front=0 rear=3) = 10 I 20 I 30

정수를 입력하시오:40

QUEUE(front=0 rear=4) = 10 I 20 I 30 I 40

큐는 포화상태입니다.

 

데이터 추가 단계 결과를 설명하자면 10을 입력하고, 10 I이 뜨고 20을 입력하고 20이 뜨고

숫자를 입력하고, 바로 정수가 뜨는 구조이다. full4개까지 쓸 수 있다.

 

--데이터 삭제 단계 --

꺼내진 정수 : 10

QUEUE(front=1 rear=4)= 20 I 30 I 40 I

꺼내진 정수 : 20

QUEUE(front=2 rear=4)= 30 I 40 I

꺼내진 정수 : 30

QUEUE(front=3 rear=4)= 40 I

꺼내진 정수 : 40

QUEUE(front=4 rear=4)=

큐는 공백 상태입니다.

 

데이터 삭제 단계는 역으로 front로부터 010으로 조정되고 front1인 상태에서 삭제되는 구조이다.

 

QUEUE(front=4 rear=4)=

큐는 공백 상태입니다.

 

여기서 진행을 더 한다면 언더 플로우(오류)상태가 된다.