1절 배열의 개요
l 동일한 크기와 성질을 가지고 있는 몇 개의 원소를 일정한 규칙에 따라 나열하는 형태로 표현하고 이 값들을 인덱스로 구분
n 인덱스 : 배열의 원소를 간단히 구별하기 위해 사용하는 번호
C언어의 인덱스는 0부터 시작
n <인덱스, 쌍> 쌍의 집합
l 한꺼번에 많은 자료를 표현해야 하는 경우 배열 사용 가능
l 여러 개의 동일한 자료형의 데이터를 한꺼번에 만들 때 사용
l 선언할 때 초기화 가능해서 앞에서부터 초기화 하고 남는 것들은 0으로 초기화됨
l 배열
n 배열의 원소들은 순차적인 방법으로 기억장소에 저장됨
n 임의의 원소에 접근하려면 배열의 인덱스를 지정하여 구분
n 자료형이 같은 자료를 나열하여 메모리에 연속적으로 저장하여 만든 자료 그룹
n 비슷한 특성을 가진 자료를 묶어 놓은 집합
n 같은 형의 변수를 여러 개 만드는 경우 사용
n 모든 자료형 배열로 구성 가능
n 형태에 따라 1차원, 2차원, … 배열 가능
n 기억장소 위치와 크기 계산할 사상방법 필요
1. 1차원 배열
1) 자료형 배열이름 [배열 개수] ;
u 자료형 : 배열 원소들은 모든 원소들이 같은 자료형으로 이루어짐
u 배열 이름 : 배열의 원소에 접근 할 수 있는 유일한 이름 변수. 변수 이름과 같은 규칙
u 배열의 개수 : 원소 개수 나타내는 정수. 인덱스는 0 ~ 원소개수-1 이 됨
2) 모든 원소들이 메모리의 연속된 공간에 저장됨
3) int A[5] = {123, 456, 789};
2. 2차원 배열
4) 2개의 1차원 배열로 구성. 첨자는 2개
5) 행(row) : 가로줄 / 열(column) : 세로줄
6) 자료형 배열이름[행 수][열 수] ;
7) int B[3][4]
3. 3차원 배열
8) 면, 행, 열 3개의 첨자 사용
9) 자료형 배열이름[면 개수][행 개수][열 개수];
10) int C[3][3][4]
2절 순서리스트
1. 개요
11) 리스트(list)
u 관련된 자료들이 일정한 순서를 이루어 나열되어 있는 구조
u 순서가 붙여진 0개 이상의 원소들의 집합
u 크기가 가변적이면서 원소가 순서를 이루는 응용에 적합한 구조
o 필요에 따라 확장 축소 가능
o 어느 위치에서나 원소를 삽입하거나 삭제 가능
u 인덱스나 포인터를 이용하여 비순서적으로 검색 가능
12) 순서 리스트
u 자료들 간에 순서를 갖는 리스트
u 물리적으로 일렬로 연결되어 있는 자료 구조 -> 배열로 구현 가능
13) 순차 자료구조와 배열
u 순차 자료구조 : 원소들의 논리적 순서 = 원소들 저장된 물리적 순서
u 배열 : 프로그래밍 언어에서 리스트 저장하는 자료형
2. 표현 방법
14) 리스트 이름 = (원소1, 원소2, … ,원소n); (괄호가 ( ) 임)
15) 순서 리스트는 원소들의 논리적 순서와 물리적 순서가 같음
학생 = (김철수, 이지연, 박영철)
16) 공백 리스트 : 원소가 하나도 없는 리스트. 빈 괄호로 표현
공백 리스트 이름 = ( )
17) 순차 자료구조의 원소 위치 계산
u 순서리스트가 저장된 시작 위치 : a
u 원소의 길이 : l
u i번째 원소의 위치 : a + ( i – 1) * l
18) 원소의 삽입과 삭제
u 원소의 삽입
o 삽입할 빈자리를 만들기 위해 삽입할 자리 이후 원소들 한자리씩 뒤로 이동
o (n + 1)개의 원소로 이루어진 순서 리스트( 0 ~ n ) 에서 k번째 자리에 원소 삽입
k번째 위치부터 마지막 n번 원소까지 (n – k + 1)개의 원소 이동
보기 좋게 ! : (n+1) – k = (원소 개수) – k (맨 뒤부터 k번째 원소까지가 이동 대상)
마지막 원소 n이 3번째인 순서 리스트 에서 k = 2 일 때 이동하는 원소 개수?
u 원소의 삭제
o 리스트에서 원소 삭제 후 삭제한 자리 이후의 원소들을 한자리씩 앞으로 이동
o (n + 1)개의 원소로 이루어진 순서 리스트( 0 ~ n ) 에서 k번째 자리의 원소 삭제
(k + 1)번 원소부터 마지막 n번 원소까지 (n – (k+1) +1)개 원소 이동
보기 좋게 ! : (n+1) – (k+1) = (원소 개수) – (k + 1) (k 다음부터 맨 끝 원소까지 이동대상)
마지막 원소 n이 4번째인 순서 리스트 에서 k = 2 일 때 이동하는 원소 개수?
u 원소를 삽입하거나 삭제할 경우 원소들이 뒤로 밀거나 앞으로 당겨서 연속 저장순서 유지해야 함
è 오버헤드 발생
è 연결 리스트로 구현하는 것이 낫다!
3절 배열의 표현
1. 다차원 배열의 행우선과 열우선
19) 1차원 배열은 물리적 저장 순서가 논리적 저장순서와 같음 (선형!)
20) 다차원 배열은 행 우선과 열 우선 방식이 있음
1) 행 우선 방식
u 행의 순서대로 저장되는 방식 (1행, 2행, 3행 ∙∙∙ 순으로 저장)
2) 열 우선 방식
u 열의 순서대로 저장되는 방식 (1열, 2열, 3열 ∙∙∙ 순으로 저장)
21) int A[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}
23) 2차원 배열 A[m][n]에서 A[i][j]의 주소
u 시작 주소 : a / 각 데이터 크기 : k / i : 행 번호 j : 열 번호
u 행 우선 방식의 주소 : a + {( i * n ) + j } * k (한 행에 n개 원소 – i 행 존재, 나머지 j개)
u 열 우선 방식의 주소 : a + {( j * m ) + i } * k (한 열에 m개 원소 – j 열 존재, 나머지 i개)
4절 희소 행렬
1. 희소 행렬
1) mⅹn 행렬 :
u m개의 행과 n개의 열로 이루어진 행렬
2) 희소 행렬
u 행렬 안의 많은 항들이 0으로 되어 있는 행렬
u 엄청 큰 희소 행렬이 있으면 메모리 낭비가 심해짐 (쓸데 없이 0을 저장하는 그런?)
u 메모리 낭비를 줄이는 방법! : 배열을 이용, 0이 아닌 원소들만을 나타낸다!
o 0이 아닌 각 원소만을 <행, 열, 값> 쌍으로 배열에 저장
o 희소 행렬에 대한 원래 정보는 <전체 행의 수, 전체 열의 수, 0이 아닌 원소 수>의 쌍으로 첫 번째 행에 저장
u 희소 행렬을 배열로 표현할 때의 단점 : 연산 측면에서 반복적인 패턴을 찾을 수 없어 비효율적
ð 희소 행렬의 0이 아닌 값들만 연결 리스트로 표현하면 기억 장소의 효율 높일 수 있음
ð 삽입과 삭제 연산도 자유로워짐
2. 전치 행렬
n 행렬의 행과 열을 서로 교환하여 구성한 행렬
n 임의의 행렬 A, B의 모든 i, j에 대하여
![](https://t1.daumcdn.net/cfile/tistory/99C4B43B5EAB39E10F)
이면 B는 A의 전치 행렬
원소의 위치 (i, j)를 (j, i)로 교환
n mⅹn 행렬 A -> nⅹm 행렬
![더블클릭을 하시면 수식을 수정할 수 있습니다.](https://t1.daumcdn.net/cfile/tistory/99B2BF3D5EAB3A6610)