[Data Structure] Array | List (배열 | 리스트)

황인용·2020년 1월 20일
0

Array | List ( 배열 | 리스트 )

Array는 Non-Primitive Data Structure(비단순 자료구조)에서 가장 기초적이고 단순하면서도 가장 자주 사용되는 Data Structure(자료구조)이다.
Python에서도 Array는 지원한다. 하지만, 사용편이상 List를 더 많이 사용한다. 만약 Array를 사용하고자 한다면, Array모듈을 import(import array)하여 사용할 수 있다.

Array의 특징

  • Ordered(순차적) : 순차적으로 데이터를 저장한다.
  • Insertion(삽입)이 순서대로 저장된다.
  • Indexing(인덱싱) : 순서대로 저장해서 각 element(요소)마다 index가 있다
  • 수정이 가능하다
  • 동일한 값도 여러번 삽입가능하다.
  • 미리 메모리 저장공간을 설정해야한다.
  • 메모리 저장공간이 더 필요할 경우, Array Resizing이 필요하다.
  • element 삭제 또는 추가 시 해당 element를 삭제하고 다시 순서를 재정의해야한다

Array의 내부구조

image.png

Array는 element의 순서로 저장되는 것이 아니라, 메모리 상에서 순차적으로 저장된다.
순서가 있기때문에 각 메모리주소마다 번호가 있고 이 번호를 Index(인덱스)라 한다.

Indexing

순서가 있음으로 index가 있고, index가 있음으로 indext를 사용해서 특정 element를 Array(List)로 부터 읽어들일 수 있다

Multi Dimentional Array

image.png

Array의 element가 Array가 될 수 있다. 즉, array안에 array가 있는 것으로 Multi Dimentional Array(다중차원배열)이라 한다.
특히 Matrix 같은 구조에서 많이 사용한다.

Removing Elements

image.png

항상 메모리가 순차적으로 이어져있어야 하기 때문에, 요소를 삭제하면 삭제된 요소로 부터 뒤에 있는 모든 요소들을 앞으로 한칸씩 이동시켜줘야한다.
따라서 element 삭제 시 다른자료구조에 비해 속도가 느리다.

Inserting Elements

element 삭제하는 상황과 마찬가지로 element를 삽입할 때에도 순서를 재정의해야함으로 다른 자료구조에 비해 느리다.

Array Resizing

image.png

Array는 메모리 저장이 순차적이어야 하다보니 배열이 처음 생성될때 어느정도 메모리를 미리 할당해놓는다. 이를 Pre-allocation 이라고 한다.
하지만 만일 처음에 미리 할당한 메모리 저장 공간이 거의 찰 경우, 앞으로 더 저장될 element에 대비하여 메모리를 더 할당하는데 이것을 Array Resizing 이라 한다.
일반적으로 Array의 메모리 Pre-allocation과 Resizing은 자동으로 실행해준다.

Array | List 장점

  • element를 메모리상에서 순서상으로(연차적으로)저장한다.
  • index, slice를 지원한다
  • index를 통해 직접 element를 찾을 수 있어, element를 읽는데 빠르다.

Array | List 단점

  • 미리 메모리 저장공간을 할당해야한다(Pre-allocation)
  • 메모리 저장공간이 더 필요할 경우 Resizing이 필요하다
  • element 삭제 또는 추가 시 해당 element 기준으로 순서를 재정의해야한다.(속도가 느리다)

When To Use Array

  • 순차열로 데이터를 저장할 때
  • 어떠한 특정 요소를 빠르게 읽어야 할 때
  • 데이터의 사이즈가 급변하게 자주 변하지 않을 때
  • element를 자주 삭제하지 않을 때
  • ex) 학생부, 시간표, 주식데이터, matrix

Array 구현 with Python

  • 파이썬에서는 리스트로 Array(배열) 구현 가능
  • list() 메소드 지원

1차원 배열

# 1차원 배열: 리스트로 구현시
data_list = [1, 2, 3, 4, 5]
data_list

# Output
[1, 2, 3, 4, 5]

2차원 배열

# 2차원 배열: 리스트로 구현시
data_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
data_list

# Output
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
profile
dev_pang의 pang.log

0개의 댓글