본문 바로가기
자료구조

[자료구조] 10장. 연결 리스트 큐 (지역변수) (Queue Linked List)

by 팔공산호랑이 2020. 4. 10.

----------------------------------------------------------

다음으로

연결리스트 큐 지역변수 버전에 대해서 살펴보겠습니다.

전역변수를 많이 쓰는건 좋지 않기 때문에

지역변수로 바꾸어 줍니다.

----------------------------------------------------------

 

----------------------------------------------------------

 

----------------------------------------------------------

 

----------------------------------------------------------

 

----------------------------------------------------------

 

----------------------------------------------------------

 

----------------------------------------------------------

 

----------------------------------------------------------

 

----------------------------------------------------------

다음으로 함수 프로토 타입은

지역변수 버전이기 때문에 이중 포인터를 사용하는 것입니다.

함수내부에서 함수외부의 포인터가 바뀔수있도록 해야 하기 때문에

2차원 포인터가 매개변수이고

1차원 포인터의 주소를 전달받아서

참조연산자를 이용해서 내부에서 값을 변경합니다.

----------------------------------------------------------

 

----------------------------------------------------------

첫번째 추가는 주소를 주어

가리키게 하고

----------------------------------------------------------

두번째 이후부터는

연결한다음

----------------------------------------------------------

옮겨가는 방식으로

똑같습니다.

----------------------------------------------------------

연결하고

----------------------------------------------------------

옮겨갑니다.

----------------------------------------------------------

완성된 소스는 다음과 같습니다.

매개변수가 이중 포인터이고

함수호출때 1차원 포인터의 주소를 받아서

함수 내부에서 참조연산자를 사용해

함수 내부에서 넘겨준 주소의 공간이 바뀌도록 합니다.

나머지는 전역변수 버전과 같습니다.

널일 경우 첫 번째 추가이고

아닐 경우 두 번째 이후 추가이기 때문에

연결후 옮겨가는 방식입니다.

----------------------------------------------------------

----------------------------------------------------------

이렇게 구축된

연결리스트 큐에서

노드를 제거하는 방법은

앞에서 부터 제거하므로

Front가 가리키는 노드를 제거하고 다음 노드로 옮겨갑니다.

----------------------------------------------------------

Front가 가리키는 노드를 바로 제거해버리면

Front갈길을 잃어버리므로

역시 보조노드인 del이 필요합니다.

Delfront가 가리키는 노드를 같이 가리킨다음

----------------------------------------------------------

Front는 옮겨가고

----------------------------------------------------------

Del 이 가리키는 노드를 제거한 다음

널 포인터를 넣어줍니다.

----------------------------------------------------------

그리고 다시 del

Front가 가리키는 노드를 따라갑니다.

----------------------------------------------------------

front는 옮겨가고

----------------------------------------------------------

Del이 가리키는 노드를 제거하고

----------------------------------------------------------

Del은 따라가고

----------------------------------------------------------

Front가 가리키는 마지막 노드를 제거하고

모두 널포인터를 가지게 됩니다.

----------------------------------------------------------

완성된 소스는 다음과 같습니다.

매개변수가 이중 포인터이고

함수호출때 1차원 포인터의 주소를 받아서

함수 내부에서 참조연산자를 사용해

함수 내부에서 넘겨준 주소의 공간이 바뀌도록 합니다.

나머지는 전역변수 버전의 디큐와 같습니다.

널일경우 제거대상이 없어서 캔트 디큐

Else 부분은 제거대상이 있을때

보조노드를 이용하여 제거대상을 가리키고

Front가 옮겨가고 제거하는 방식입니다.

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

완성된 소스는 다음과 같습니다.

매개변수는 역시 2차원 포인터이고

내부에서 참조연산자를 사용합니다.

노드가 널이 아닌동안

출력하고 이동하고를 반복합니다.

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

완성된 소스는 다음과 같습니다.

마찬가지로 2차원 포인터가 매개변수이고

내부에서 참조연산자만 썼을 뿐

기본적인 형태는 전역변수 버전의

서치노드 함수와 같습니다.

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

이런식으로 처음에

인큐 10

인큐 20

인큐 30 하면

프린트 노드 했을때

10, 20, 30으로

추가한 순서대로 출력이 되고

디큐 하면

앞에서부터 제거가 되기 때문에

디큐 10이 출력이 되고

그다음 프린트 노드 하면

하나가 제거된 상태로

20 30이 출력이 되고

서치 데이터 30 하면

30이 탐색되므로

파인드 30이 나옵니다.

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------

----------------------------------------------------------