일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 프로세스제어
- 자바예제문제풀이
- 비순환
- cpu성능향상
- 모듈구조
- 자바
- cpu 스케줄링 알고리즘의 비교 분석한 표
- java
- 운영체제
- C언어
- 파일연산
- 데이터적재오류
- 명품자바
- c언어개발환경
- dfs.append(df)
- 디렉터리구조
- c자료구조
- 프로그래머스
- 컴퓨터구조
- 마이크로터널
- 운영체제부팅
- 셀레니움 명령어
- 데이터db
- CPU
- 인터럽트처리과정
- 스케줄링평가기준
- 보호와보안
- 파일시스템개요
- 아나콘다 설치법
- 객체지향적접근방법
- Today
- Total
aiccstudy Blog
[C언어 자료구조]원형큐 실습 보고서 과제 본문
원형 큐 코드가 시작할 때 #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(“큐는 포화상태입니다.\n\n”); 는 큐는 포화상태라는 것을 알 수 있다.
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이 뜨고
숫자를 입력하고, 바로 정수가 뜨는 구조이다. full은 4개까지 쓸 수 있다.
--데이터 삭제 단계 --
꺼내진 정수 : 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로부터 0이 10으로 조정되고 front가 1인 상태에서 삭제되는 구조이다.
QUEUE(front=4 rear=4)=
큐는 공백 상태입니다.
여기서 진행을 더 한다면 언더 플로우(오류)상태가 된다.
'c언어' 카테고리의 다른 글
[C언어]CPU 스케줄링 알고리즘의 비교 분석한 표 리포트 과제 (2) | 2024.07.01 |
---|---|
[C언어] Visual Studio설치 및 개발 환경 (0) | 2024.06.12 |