이번 프로그램은 사진의 출간년도, 사진의 제목, 사진감독 3가지 데이터를 general list로 구성하는 것이다
non generic으로 진행하며 multi linked list로 구성한다
먼저 multi linked list를 보게 되면 일반적인 linked list와 차이점은
일반적인 linked list가 하나의 key값을 사용하여 oreder를 한다면
multi linked list는 2개 이상 복수개의 key값을 사용하여 oreder를 하는 특징이 있다
예를 들어 이번 코드처럼 3가지 데이터를 가지고 구성한다면 사진의 출간년도 뿐만 아니라
사진의 제목으로도 정렬을 하는 것이다
물리적인 데이터는 일반적인 single linked list와 동일하지만 HeadNode에서 두개의 key값을 선택하여
연결하는 것이다
필요한 구조체들을 선언한다
사진의 정보를 담고있는 SPICTURE 구조체이다
사진의 출간년도 year
사진의 이름 char형 배열으로 arrTitle
사진 감독 이름 동일하게 char형 배열으로 arrDirector
사진의 정보를 담고있는 SPICTURE 포인터
Key를 year로 했을 경우 다음 노드를 가리키기 위하여 자기 자신의 주소를 담는 포인터 yearNode
Key를 title로 했을 경우 다음 노드를 가리키기 위하여 자기 자신의 주소를 담는 포인터 titleNode
SDataNode의 경우 typedef을 구조체 선언보다 앞에서 진행하는데
이유는 구조체 선언에서 구조체 내부에서 자기 자신의 포인터를 사용하기 때문에
구조체보다 앞에서 미리 선언을 하는 전방선언을 한다
만약 하지 않으면 구조체 선언부에서 SDataNode* 에 대한 정보가 없다고 오류가 뜨게 된다
다음은 SHeadNode인데
현재 요소의 개수를 알려주는 count
Key값을 year로 했을 때 첫번 째 노드를 가리키는 yearFront 마지막 노드를 가리키는 yearRear
Key값을 title로 했을 때 첫번 째 노드를 가리키는 titleFront 마지막 노드를 가리키는 titleRear
마지막 preNode같은 경우는 Search 같은 함수를 실행 할 때 찾고자 하는 target data 뿐만 아니라
직전의 데이터 또한 필요한데 이때 저장을 위한 임시 저장소로 사용된다
구현한 구조체인 SHeadNode SDataNode SPICTURE 인데
SPICTURE 에는 각각 임의의 값을 지정해 두었다
SDataNode 의 요소중 picture이 SPICTURE을 가리키는데 주소값으로 연결하면
그 다음 Key값인 year 와 title에 대해서 정렬 된 순서로 연결을 하여야 하는데
year의 경우 오름차순으로 정렬을 하여 8 -> 9 -> 10 순서가 되어야 한다
SHeadNode의 yearFront는 첫번째 노드인 8을 가지고있는 노드를 가리키고
첫번 째 노드의 yearNode는 9을 가지고 있는 노드를
10을 가지고 있는 노드는 마지막 10을 가지고 있는 노드를 가리키고
10을 가지고 있는 노드는 마지막 노드임으로 NULL을 가리킨다
yearRear는 마지막 노드를 가리킨다
Year에 대해서 연결을 했으니 이번엔 Title에 대해서 연결을 해야한다
Title 또한 Year와 같은 방식으로 알파벳 순서로 가장 앞선 apple 노드를 titleFront가 가리키고
apple 노드의 titleNode는 다음 순서인 bear 노드를
bear노드는 마지막 노드인 cat 노드를 가리킨다
cat 노드는 마지막 노드임으로 NULL을 가리키고 동시에 titleRear도 cat노드를 가리키게 된다
'자료구조' 카테고리의 다른 글
스택(Stack) Decimal to Binary (0) | 2020.04.25 |
---|---|
스택 (Stack) (0) | 2020.04.24 |