자료를 효율적으로 이용할 수 있는 방법론.
데이터를 구조적으로 표현하는 방식들을 자료 구조라고 한다.
원시 구조 / 선형 구조 / 비선형 구조
물리적 구조 / 추상적 구조
같은 타입의 데이터가 순차적으로 저장된 구조.
index를 통해 index번째에 해당하는 요소에 접근할 수 있다.
데이터의 크기와 메모리상 저장된 위치가 고정적이다. 한 번 배열을 만들어두면 원소의 갯수만큼 메모리에서 공간을 차지하게 된다.
장점 : n번째 요소에 접근 속도가 빠르다.
데이터가 순서에 따라서 빈틈없이 연속적으로 위치하는 데이터 구조.
... java에서만 사용되는 개념이라고 하던데...그럼 자료구조의 한 종류로 볼 수 없나요?
배열을 이용해서 리스트를 구현한 구조.
배열의 경우 중간의 요소를 삭제하게 되면 그 공간은 null이 된다. 따라서 메모리 낭비가 생길 수 있는 단점이 있다.
array list는 중간의 빈 공간을 그 다음 요소가 순차적으로 메꾸면서, 빈틈이 없는 연속적인 배열이다.
장점 : array의 장점인 index를 사용할 수 있어, n번째 요소 접근이 빠르다.
단점 : 데이터 추가와 삭제가 느리다.
요소간 연결을 이용해서 리스트를 구현한 구조.
linked list에서는 연결된 요소를 node라고 한다. node는 값(value)과 다음 노드의 주소(next)가 담겨져있다.
장점 : 추가와 삭제가 빠르다
단점 : n번째 요소로 접근하는 속도가 느리다. n(O)
Swift의 array는 엄밀히 말해서 자료구조-배열로 볼 수 있을까?
자료구조-리스트에 해당하는 것이 아닐까?
그렇게 생각한 근거는 아래와 같다.
append
remove
와 같은 메서드로 요소를 추가, 수정할 수 있기 때문에 크기가 유동적이다.append
메서드의 시간 복잡도는 O(1)이다. 단, append
하기 전, 메모리 저장공간을 재할당하거나 다른 복사본과 메모리를 공유하고 있다면 시간 복잡도는 O(n)이 된다.swift의 array는 내부적으로 어떻게 구현이 되어 있을지 궁금하다.