3차원 배열을 이용한 선형 리스트의 구현

CODEDRAGON Development/Algorithm, DataStructure

반응형



 

 

3차원 배열을 이용한 선형 리스트의 구현

 

분기별 XXX 판매량 리스트

 

1

년도\분기

1/4분기

2/4분기

3/4분기

4/4분기

2070

74

86

147

132

2080

175

209

251

312

 

2

년도\분기

1/4분기

2/4분기

3/4분기

4/4분기

2070

63

80

131

144

2080

169

178

239

320

 

 

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] 위치 = α + {(injnk) + (jnk) + k}

 

ni

면의 개수

nj

행의 개수

nk

열의 개수

α

시작 주소

원소의 길이

 

 

 

 

 

우선 순서 방법(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] 위치 = α + {(knjni) + (jni) + i}

 

ni

면의 개수

nj

행의 개수

nk

열의 개수

α

시작 주소

원소의 길이

 

 

 

메모리 주소 출력결과 확인하기

 

메모리 주소 출력결과

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 위치 = α+{(injnk)+(jnk)+k}

= 6422236+ {(124)+(14)+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