본문 바로가기
Archive

[7] Queue 함수 구현하기 - destroyQueue

by livemehere 2020. 10. 6.


자 대망의 마지막 함수입니다.

이때까지 

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