리스트(List)
- 자료를 나열한 목록
ex)
분식 = ['떡볶이', '김밥', '순대', '핫도그', '튀김', '어묵']
수능 = ['국어', '수학', '영어', '사회', '과학', '외국어']
나라 = ['대한민국', '미국', '중국', '일본']
선형 리스트(Linear List)
- 순서 리스트(Ordered List)
- 자료들 간 순서를 갖는 리스트
선형 리스트의 저장
- 원소들의 논리적 순서와 같은 순서로 메모리에 저장
- 순차 자료구조의 원소 위치 계산
- 선형 리스트가 저장된 시작 위치 a
- 원소의 길이 : l
- i번째 원소의 위치 = a + (i-1) x l
선형 리스트에서의 원소 삽입
- 중간에 원소 삽입시 그 뒤 원소들은 한 자리씩 뒤로 이동하여 물리적 순서와 논리적 순서를 일치시킨다.
- 방법
① 원소를 삽입할 자리 이후 원소들을 뒤로한 자리씩 밀어 빈자리 만들기
② 준비한 빈자리에 원소 삽입
- 자리 이동 횟수 : 마지막 원소 인덱스 - 삽입할 자리 인덱스 + 1
선형 리스트에서의 원소 삭제
- 중간에 원소 삭제 시 그 뒤 원소들은 한 자리씩 앞으로 이동하여 물리적 순서와 논리적 순서를 일치시킨다.
- 방법
① 원소 삭제
② 삭제한 자리 이후 원소들을 앞으로 한 자리씩 앞으로 당겨 삭제한 빈자리 채우기
- 자리 이동 횟수 : 마지막 원소 인덱스 - 삭제한 자리 인덱스
선형 리스트 구현
- 순차 구조의 배열 사용 ( 배열 = <인덱스, 원소> )
- 1차원 배열 이용
ex)
논리적 구조
[0] | [1] | [2] | [3] |
물리적 구조
[0] |
[1] |
[2] |
[3] |
- 2차원 배열 이용
ex)
논리적 구조
[0][0] | [0][1] | [0][2] | [0][3] |
[1][0] | [1][1] | [1][2] | [1][3] |
물리적 구조
① 행 우선 순서 방법(row major order)
ㄴ 원소의 위치 계산 방법 : 배열의 시작 주소 + (행 x 열의 개수 + 열) x 원소의 길이
[0][0] |
[0][1] |
[0][2] |
[0][3] |
[1][0] |
[1][1] |
[1][2] |
[1][3] |
② 열 우선 순서 방법(column major order)
ㄴ 원소의 위치 계산 방법 : 배열의 시작 주소 + (열 x 행의 개수 + 행) x 원소의 길이
[0][0] |
[1][0] |
[0][1] |
[1][1] |
[0][2] |
[1][2] |
[0][3] |
[1][3] |
- 3차원 배열 이용
ex)
논리적 구조
[0][0][0] | [0][0][1] | [0][0][2] | [0][0][3] |
[0][1][0] | [0][1][1] | [0][1][2] | [0][1][3] |
[1][0][0] | [1][0][1] | [1][0][2] | [1][0][3] |
[1][1][0] | [1][1][1] | [1][1][2] | [1][1][3] |
물리적 구조
① 면 우선 순서 방법
ㄴ 원소의 위치 계산 방법 : 배열의 시작 주소 + {(면 x 행의 개수 x 열의 개수) + (행 x 열의 개수) + 열} x 원소의 길이
[0][0][0] |
[0][0][1] |
[0][0][2] |
[0][0][3] |
[0][1][0] |
[0][1][1] |
[0][1][2] |
[0][1][3] |
[1][0][0] |
[1][0][1] |
[1][0][2] |
[1][0][3] |
[1][1][0] |
[1][1][1] |
[1][1][2] |
[1][1][3] |
② 열 우선 순서 방법
ㄴ 원소의 위치 계산 방법 : 배열의 시작 주소 + {(열 x 행의 개수 x 면의 개수) + (행 x 면의 개수) + 면} x 원소의 길이
[0][0][0] |
[1][0][0] |
[0][1][0] |
[1][1][0] |
[0][0][1] |
[1][0][1] |
[0][1][1] |
[1][1][1] |
[0][0][2] |
[0][1][2] |
[1][0][2] |
[1][1][2] |
[0][0][3] |
[0][1][3] |
[1][0][3] |
[1][1][3] |
'자료구조' 카테고리의 다른 글
[자료구조] 스택 (Stack) (0) | 2022.01.08 |
---|---|
[자료구조] 이중 연결 리스트 (0) | 2022.01.02 |
[자료구조] 다항식 (0) | 2022.01.01 |
[JAVA / 자바] 객체지향 프로그래밍 (0) | 2021.12.26 |
[자료구조] 소프트웨어와 자료구조 (0) | 2021.12.05 |