자 대망의 마지막 함수입니다.
이때까지
1.createQueue
2.enqueue
3.dequeue
를 통해서 큐를 생성하고, 데이터 삽입,삭제 까지 구현을 했습니다.
그렇다면 이제 큐를 완전히 제거하는 함수를 만들것인데 바로
4.destroyQueue입니다.
우선 매개변수로 Queue만을 받으면 되겠고,
큐를 제거한다는 것은 내용물을 다지우고, 마지막으로 queue라는 큰 덩어리도 지워버리는 것입니다.
내용물은 NODE로 이루어져있죠?
그렇다면 그것을 읽기위해서 NODE 포인터를 생성해줍니다.
!! 읽기 전용으로 쓰기 때문에 동적할당은 하지 않습니다.
NODE* deletePtr;을 선언해줍니다.
그리고선 경우의수는 2가지입니다.
queue가 완전히 비었을때
queue에 내용이 있을때
완전히 비었다면, 추가적인 작업을 해줄 필요가없겠죠? 바로 free(queue)를 해주고 끝냅니다.
그렇지 않다면(NODE가 1개라도 있다면)
우선 deletePtr에 front->next를 넣어줍니다.
그다음 free(queue->front)를 해줌으로서 맨앞의 노드를 지워줍니다.
하지만 우리는 next의 값을 deletePtr에저장해 두었죠?
dequeue를 할때와 마찬가지로 맨앞의 node를 지웠다면 그 다음 노드가 front로 와야합니다.
그래서 queue->front = deletePtr; 를 해주는 것입니다.
이제 이것을 while 문으로 반복을 시킵니다. 언제까지?
queue->front 가 NULL이 될때 까지!
왜 NULL이냐? 우리가 하나하나씩 앞에서 지워나가면 결국 rear에 있는 마지막 노드까지 도달하겠죠?
근데 마지막 node의 next는 NULL값이죠? 그렇기 때문에
반복을하다가 queue->front에 NULL이 들어가게 된다면 rear까지 다 작업을 맞쳤다는 의미입니다.
그러므로 while문은 queue->front 가 NULL일 경우 바로 동작을 중지하고, 빠져나갑니다.
이젠 내용물을 다지웠으니 queue를 지워주면 되겠죠?
free(queue)를 해주면 끝입니다.
그럼 다음포스팅에선 이함수들을 가지고 메인함수에서 어떻게 활용하는지 살펴보고 마무리를 하도록 하겠습니다.
'Archive' 카테고리의 다른 글
1. background-color와 color (0) | 2021.01.18 |
---|---|
[8]QUEUE의 최종 구현 - C (0) | 2020.10.06 |
[6] Queue 함수 구현하기 - deQueue (0) | 2020.10.06 |
[5] Queue 함수 구현하기 - enQueue (0) | 2020.10.06 |
[4] Queue 함수 구현하기 - CreateQueue (0) | 2020.09.22 |