CODEDRAGON ㆍDevelopment/Algorithm, DataStructure
3차원 배열을 이용한 선형 리스트의 구현
분기별 XXX 판매량 리스트 |
|
||||||||||||||||||||||||||||||
2차원 배열로 구현 |
int sale[2][2][4] = { {{74, 86, 147, 132}, {175, 209, 251, 312}}, {{63, 80, 131, 144}, {169, 178, 239, 320}} }; |
||||||||||||||||||||||||||||||
논리적 메모리 구조 |
분기별 판매량 선형 리스트의 논리적 구조
|
||||||||||||||||||||||||||||||
물리적 메모리 구조 |
분기별 판매량 선형 리스트의 물리적 구조 3차원 배열의 물리적 저장방법은 두가지가 있습니다. (3차원 논리적 구조에 대해 1차원의 물리적 구조로 저장됩니다.)
|
3차원 배열의 물리적 저장 방법
3차원의 논리적 순서를 1차원의 물리적 순서로 변환하는 방법을 사용합니다.
· 면 우선 순서 방법(Plane Major Order)
· 열 우선 순서 방법(Column Major Order)
면 우선 순서 방법(Plane Major Order)
3차원 배열의 첫 번째 인덱스인 면 번호를 기준으로 사용하는 방법입니다. |
||||||||||
sale[0][0][0]= 74, sale[0][0][1]= 86, sale[0][0][2]=147, sale[0][0][3]=132, sale[0][1][0]=175, sale[0][1][1]=209, sale[0][1][2]=251, sale[0][1][3]=312, sale[1][0][0]= 63, sale[1][0][1]= 80, sale[1][0][2]=131, sale[1][0][3]=144, sale[1][1][0]=169, sale[1][1][1]=178, sale[1][1][2]=239, sale[1][1][3]=320, |
||||||||||
|
||||||||||
면의 개수가 ni이고 행의 개수가 nj이고, 열의 개수가 nk인 3차원 배열 A[ni][nj][nk], 시작 주소가 α이고 원소의 길이가 ℓ일 때, i면 j행 k열 원소
A[i][j][k]의 위치 = α + {(iⅹnjⅹnk) + (jⅹnk) + k}ⅹℓ
|
열 우선 순서 방법(Column Major Order)
3차원 배열의 마지막 인덱스인 열 번호를 기준으로 사용하는 방법입니다. |
||||||||||
sale[0][0][0]= 74, sale[1][0][0]= 63, sale[0][1][0]=175, sale[1][1][0]=169, sale[0][0][1]= 86, sale[1][0][1]= 80, sale[0][1][1]=209, sale[1][1][1]=178, sale[0][0][2]=147, sale[1][0][2]=131, sale[0][1][2]=251, sale[1][1][2]=239, sale[0][0][3]=132, sale[1][0][3]=144, sale[0][1][3]=312, sale[1][1][3]=320, |
||||||||||
|
||||||||||
A[i][j][k]의 위치 = α + {(kⅹnjⅹni) + (jⅹni) + i}ⅹℓ
|
메모리 주소 출력결과 확인하기
메모리 주소 출력결과
C 컴파일러가 면 우선 순서 방법으로 3차원 배열을 저장함을 확인할 수 있습니다.
sale[0][0][0]= 74 sale[0][0][1]= 86 sale[0][0][2]=147 sale[0][0][3]=132 sale[0][1][0]=175 sale[0][1][1]=209 sale[0][1][2]=251 sale[0][1][3]=312 sale[1][0][0]= 63 sale[1][0][1]= 80 sale[1][0][2]=131 sale[1][0][3]=144 sale[1][1][0]=169 sale[1][1][1]=178 sale[1][1][2]=239 sale[1][1][3]=320 |
address:6422236, sale 0 = 74 address:6422240, sale 1 = 86 address:6422244, sale 2 = 147 address:6422248, sale 3 = 132 address:6422252, sale 4 = 175 address:6422256, sale 5 = 209 address:6422260, sale 6 = 251 address:6422264, sale 7 = 312 address:6422268, sale 8 = 63 address:6422272, sale 9 = 80 address:6422276, sale 10 = 131 address:6422280, sale 11 = 144 address:6422284, sale 12 = 169 address:6422288, sale 13 = 178 address:6422292, sale 14 = 239 address:6422296, sale 15 = 320 |
배열의 시작 주소 α=6422236, ni=2, nj=2, nk=4, i=1, j=1, k=2, ℓ=4 sale[1][1][2]=239의 위치 = α+{(iⅹnjⅹnk)+(jⅹnk)+k}ⅹℓ = 6422236+ {(1ⅹ2ⅹ4)+(1ⅹ4)+2}ⅹ4 = 6422236+ 56 = = 6422292 |
'Development > Algorithm, DataStructure' 카테고리의 다른 글
알고지즘을 표현하는 기본 스텝 (0) | 2018.10.03 |
---|---|
Selection Sort(선택정렬) (0) | 2018.09.11 |
Queue 활용 사례 (0) | 2018.08.28 |
리스트(list) (0) | 2018.08.21 |
연결 리스트(Linked List) (0) | 2018.08.16 |