----------------------------------------------------------
다음으로
연결리스트 큐 지역변수 버전에 대해서 살펴보겠습니다.
전역변수를 많이 쓰는건 좋지 않기 때문에
지역변수로 바꾸어 줍니다.
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
다음으로 함수 프로토 타입은
지역변수 버전이기 때문에 이중 포인터를 사용하는 것입니다.
함수내부에서 함수외부의 포인터가 바뀔수있도록 해야 하기 때문에
2차원 포인터가 매개변수이고
1차원 포인터의 주소를 전달받아서
참조연산자를 이용해서 내부에서 값을 변경합니다.
----------------------------------------------------------
----------------------------------------------------------
첫번째 추가는 주소를 주어
가리키게 하고
----------------------------------------------------------
두번째 이후부터는
연결한다음
----------------------------------------------------------
옮겨가는 방식으로
똑같습니다.
----------------------------------------------------------
연결하고
----------------------------------------------------------
옮겨갑니다.
----------------------------------------------------------
완성된 소스는 다음과 같습니다.
매개변수가 이중 포인터이고
함수호출때 1차원 포인터의 주소를 받아서
함수 내부에서 참조연산자를 사용해
함수 내부에서 넘겨준 주소의 공간이 바뀌도록 합니다.
나머지는 전역변수 버전과 같습니다.
널일 경우 첫 번째 추가이고
아닐 경우 두 번째 이후 추가이기 때문에
연결후 옮겨가는 방식입니다.
----------------------------------------------------------
----------------------------------------------------------
이렇게 구축된
연결리스트 큐에서
노드를 제거하는 방법은
앞에서 부터 제거하므로
Front가 가리키는 노드를 제거하고 다음 노드로 옮겨갑니다.
----------------------------------------------------------
Front가 가리키는 노드를 바로 제거해버리면
Front가 갈길을 잃어버리므로
역시 보조노드인 del이 필요합니다.
Del이 front가 가리키는 노드를 같이 가리킨다음
----------------------------------------------------------
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이 나옵니다.
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
'자료구조' 카테고리의 다른 글
[자료구조] 11장. 트리 (Tree) (0) | 2020.04.11 |
---|---|
[자료구조] 9장. 연결 리스트 큐 (전역변수) (Queue Linked List) (0) | 2020.04.10 |
[자료구조] 8장. 연결 리스트 스택 (지역변수) (Stack Linked List) (0) | 2020.04.10 |
[자료구조] 7장. 연결 리스트 스택 (전역변수) (Stack Linked List) (0) | 2020.04.10 |
[자료구조] 6장. 연결 리스트 설명과 구현 (Linked List) (0) | 2020.04.10 |