일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 성북구맛집
- 국가직
- 돈암동맛집
- JavaScript
- 꼴뚜기회
- gradle
- 파이썬
- ELK
- react
- 성신여대맛집
- 한남동맛집
- springboot
- 방이편백육분삼십
- 자바스크립트에러처리
- 방이편백육분삼십성신여대
- 공무원
- 한성대맛집
- 퇴사후공무원
- 서울숲누룽지통닭구이
- 통영예쁜카페
- 스페인여행
- ubuntu자바설치
- npm
- 통영
- 뚝섬역맛집
- 통영에어비앤비
- 통영여행
- tomcat7
- 성신여대편백집
- 영화추천
- Today
- Total
코린이의 기록
[C언어] Queue 본문
Queue 자료구조는 처음 영화관에 들어간 사람이 가장 먼저 티켓을 받는것과 비유할 수 있다. 즉 Queue는 FIFO(First In First Out)구조이다.
위 그림에서 보는바와 같이 Queue에 데이터를 집어넣는 것을 "EnQueue"라고 하고 Queue에서 데이터를 빼는 것을 "DeQueue"라고 한다.
Key Words
EnQueue : Queue에 요소를 추가한다.
DeQueue : Queue에 요소를 제거한다.
IsEmpty : Queue가 비어있는지 확인한다.
IsFull : Queue가 가득찼는지 확인한다.
참고
Peek : Queue에서 요소를 제거하지 않고 요소를 Get 한다.
동작 원리
1. "Front"와 "Rear" 두개의 포인터는 각각 Queue의 처음과 마지막을 의미한다.
2. Queue를 초기화 할 때 "Front"와 "Rear"를 각각 -1로 초기화 한다.
3. Enqueue를 할 때 "Rear" 인덱스를 증가시켜 요소를 Queue에 넣는다.
4. Dequeue를 할 때 "Front" 인덱스를 증가시켜서 Queue에서 요소를 제거한다.
5. Enqueue할때에는 Queue가 가득 찼는지를 반드시 확인해야 한다. (IsFull)
6. Dequeue할때에는 Queue가 비어있지 않는지를 반드시 확인해야 한다. (IsEmpty)
7. Enqueue를 처음 시작할때 "Front"값은 0으로 초기화 한다.
8. 마지막으로 Dequeue를 할때에는 "Front"값과 "Rear"값을 각각 -1로 Set해준다.
전체 소스
Header (queue.h)
line 9 : Queue를 초기화 하는 함수
line 14 : Queue를 출력하는 함수
queue.c
Enqueue
line 14 : Enqueue를 하기 전에 Queue가 가득 찼는지 확인한다.
line 18 : 처음 Enqueue를 할때에는 Queue의 Front값을 0으로 set해준다.
line 21 : Enqueue를 할때에는 Rear 인덱스를 증가시켜 준다.
line 22 : 증가된 Rear 인덱스에 Enqueue할 데이터값을 넣는다.
Dequeue
line 29 : Dequeue를 하기 전에 Queue가 비어있지는 않는지 확인한다.
line 32 : Queue의 Front 값이 Rear값보다 크거나 같으면 모든 데이터를 Dequeue했다는 뜻이므로 Queue의 Front값과 Rear값을 -1로 초기화 해준다.
line 36 : item 변수에 Dequeue할 값을 넣어준다.
line 37 : Dequeue를 할때에는 Front의 인덱스를 증가시켜준다.