배열, 연결리스트 - algorithm[1]

배열, 연결리스트 - algorithm[1]

Tag
Algorithm

배열

배열
배열
메모리 상에 원소를 연속하게 배치한 자료구조
 

배열의 성질

  1. O(1)에 k번째 원소를 확인/변경 가능
  1. 추가적으로 소모되는 메모리의 양(=overhead)가 거의 없음
  1. Cache hit rate가 높음
  1. 메모리 상에 연속한 구간을 잡아야 해서 할당에 제약이 걸림
 

시간복잡도

  • 임의의 위치에 있는 원소를 확인/변경 = O(1)
  • 원소를 끝에 추가 = O(1)
  • 마지막 원소를 제거 = O(1)
  • 임의의 위치에 원소를 추가/임의 위치의 원소 제거 = O(N)
    • 추가의 경우 그 뒤의 원소들을 전부 한 칸씩 밀어야 함.
    • 삭제의 경우 그 위의 원소들을 한 칸씩 땡겨와야 함.
    •  

연결 리스트

원소들을 저장할 때 그 다음 원소가 있는 위치를 포함시키는 방식으로 저장하는 자료구조
배열과 연결리스트
배열과 연결리스트
 

연결 리스트의 성질

  1. k번째 원소를 확인/변경하기 위해 O(K)가 필요함
  1. 임의의 위치에 원소를 추가/임의 위치의 원소 제거는 O(1)
  1. 원소들이 메모리 상에 연속해있지 않아 Cache hit rate가 낮지만 할당이 다소 쉬움
 

연결 리스트의 종류

notion image
  • 단일 연결 리스트
    • 각 원소가 자신의 다음 원소의 주소를 들고 있는 연결 리스트
  • 이중 연결 리스트
    • 각 원소가 자신의 이전 원소와 다음 원소의 주소를 둘 다 들고 있음
    • 원소가 가지고 있어야 하는 정보가 1개 더 추가되니 메모리를 더 쓴다
  • 원형 연결 리스트
    • 단일 연결 리스트 / 이중 연결 리스트 중 무엇을 사용하더라도 상관 없음
    •  

      배열 vs 연결 리스트

      notion image
    • 배열과 연결 리스트는 선형 자료구조
    •  
      연결 리스트의 예시
      연결 리스트의 예시
       

      Insert 함수

      notion image
       

      Erase 함수

      notion image