본문으로 바로가기

Array

  • 논리적 저장 순서와 물리적 저장 순서가 일치.
  • 특정 자료형들이 메모리 공간에 연속적으로 존재.
  • 인덱스를 통해 .Random Access 가능 -> O(1)
  • 삽입, 삭제 시에는 해당 인덱스 이후의 자료들이 Shift 됨 -> O(n)
  • 일반적으로 Array 선언 시, Compile Time 에 정적 메모리 할당.
    + 가변 배열이 아닌 이상, 선언시의 Array Size 는 immutable.
    => 메모리 공간 활용 제약, 크기 초과시, 변경 시에 다른 주소에 재할당 필요!

Linked List

  • 저장 공간상에 자료들이 흩어져 있고, 각 노드가 자신의 다음 노드의 주소를 지닌다 -> 자료 외에 별도의 포인터 저장 공간 필요.
    => 논리적 저장 순서와 물리적 저장 순서가 불일치.
  • 첫 노드의 주소만을 저장 했다가 필요 시 Sequential Access 를 통해 접근.
  • 검색, 삽입, 삭제 시 모두 O(n) 소요.
    => 해당 위치를 찾는 데에 O(n) 소요되고, Array와 달리 Shift는 불필요하다.
    => 따라서, 삽입과 삭제가 맨 앞 노드에서만 이루어지게되는 특성의 링크드리스트라면, 삽입 삭제는 O(1)이 될 수 있다.
  • Run Time 에 동적 메모리 할당

Array VS Linked List

  • 데이터 접근이 많이 일어나는 경우에는 배열 사용.
  • 삽입 삭제가 많이 일어나는 경우에는 링크드 리스트 사용.
  • 가변 배열 - 벡터, 리스트와 같은 자료형으로, 배열의 공간 활용 제약의 단점을 극복!
    => 공간에 여유가 있으면, append()를 사용하여 자료형 1개 크기 만큼 동적으로 사이즈 할당이 가능하고,
    공간 활용에 제약이 생기면, resize()를 통해 크기 재할당 후 모든 원소를 이주할 수 있다(비용이 발생).

CS 공부Algorithm, Data Structure (재정리)카테고리의 다른글

Binary Tree  (0) 2021.04.07
Stack, Queue  (0) 2021.04.06
Insertion Sort  (0) 2021.04.06
Selection Sort  (0) 2021.04.06
Bubble Sort  (0) 2021.04.06