본문 바로가기
Archive

[5] Queue 함수 구현하기 - enQueue

by livemehere 2020. 10. 6.

자 enqueue에 대해서 설명드리겠습니다.


우선 queue에 데이터를 넣는 작업이기 때문에, 매개변수로 queue와 data를 입력받습니다.

그리곤 NODE를 생성해주는데요, 우리는 데이터를 쓰는 작업을 할 것이기때문에

포인터에 공간을 할당해주어야합니다. 그것을 동적할당 = malloc이라고 합니다.

 

NODE를 생성하고 동적할당을 해준뒤 초기화를 해주어야합니다.

new_node->data 는 입력받은 데이터를 그대로 넣어주면됩니다.

new_node->next 는 항상 NULL로 초기화를 해줍니다. queue에 아직 넣은것이 아니라 데이터를

저장할 기본 세팅을 하는 과정이니깐요


그리곤 이제 queue에 방금 생성한 node를 넣습니다.

이때 경우의 수가 두가지 인데요

1. queue가 비어있을경우

2. queue안의 데이터가 1개 이상 이미 있을경우

 

1. queue가 비어있다면 front와 rear가 모두 지금 넣고자 하는 node를 가리켜야합니다.

그렇기 때문에 queue의 front->new_node, rear->new_node 를 해줍니다.

(그림에서의 코딩과 다릅니다 일단 들으세요!)

 

2. queue가 이미있다면, front는 건드릴 필요가 없고, rear만 new_node를 가리키면 되겠죠?

하지만 그전에 기존에 rear가 있기 때문에 기존의 rear->next가 new_node를 가리키게 한다음

new_node를 rear로 저장한다면, 맨 끝으로 데이터를 넣고 그앞의 데이터들과 연결이 되는 모양세가 됩니다.

 

자 이제 이것들을 정리해본다면 겹치는 작업이있습니다

바로 new_node(지금 삽입할 노드)가 rear에 위치해야된다는 것인데요

당연히 queue의 원리는 rear에서 삽입이 일어납니다. 그렇기때문에 queue가 비어있든, 이미 데이터가 있든 상관없이

무조건 rear에 위치해야됩니다. 그렇기 때문에 공통적인 부분은 if문 밖으로 빼서 무조건 실행이 되도록 하여 중복을 줄였습니다.

그리고 마찬가지로 1,2의 경우의수 중 어떤것이든간에 count가 늘어나야하는것도 동일한 원리입니다.

 


이렇게 enqueue까지 마치겠습니다. 

반응형