1장 플레이그라운드 살펴보기

sun02·2021년 9월 23일
0

- 기본적인 데이터 구조

1. 인접 데이터 구조

: 데이터를 메모리 영역 중 인접한 부분에 저장한다.
선형 데이터 구조를 이루며 일정한 순서에 따라 개별 데이터 요소에 접근할 수 있는 인덱스 기반의 데이터 구조

ex) 배열, 힙, 매트릭스, 해시테이블 등

2. 연결 데이터 구조

: 서로 명확히 구분되는 메모리 영역을 차지하되, 포인터라는 주소 체계로 연결/관리되는 구조

ex) 목록(list), 트리(trees), 그래프

연결 데이터 구조 = 데이터 타입 + 포인터(다른 데이터와 묶어줌)

  • 포인터 : 메모리 상의 위치 주소
    • 스위프트는 C언어와 같은 언어와 다르게 직접적으로 포인터에 접근하지 않으며, 포인터를 활용할 수 있는 별도의 추상 체계 제공.

2-1. 연결 리스트(linked lists)

: 연결 데이터 구조 중 하나로, 일련의 노드로 구성되며, 각 노드는 링크 필드를 통해 서로 연결되어 있다.

  • 노드
    • 연결리스트는 자체 참고 클래스인 노드로 구성되고,
      각각의 노드는 데이터와 전체 연결 데이터에서 다음 노드로 이동할 수 있는 링크 정보를 포함한다.

  • 단일 연결 리스트

  • 이중 연결 리스트

- Swift에서의 데이터 타입

1. 벨류 타입과 레퍼런스 타입

1-1. 벨류 타입

: 하나의 객체만을 지니며, 해당 타입의 데이터가 변수 또는 상수에 할당되거나 함수에 전달될 때 값을 복사한다.

ex) 구조체, 열거형 등이 벨류 타입이며 스위프트의 모든 데이터 타입은 기본적으로 구조체이다.

1-2. 레퍼런스 타입

: 값을 복사하지 않고 공유한다. 변수에 할당하거나 함수에 전달할 때 값을 복사해서 제공하지 않고 동일한 인스턴스를 참조값으로 활용한다.

ex) 클래스, 클로져

2. 기명 타입과 복합 타입

2-1. 기명 타입(named types)

: 사용자가 정의할 수 있는 데이터 타입이며, 해당 타입이 정의될 대 이름을 부여할 수 있는 타입이다.

ex) 클래스, 구조체, 열거형, 프로토 타입

2-2. 복합 타입(compound types)

: 별도의 이름이 붙여지지 않은 타입이며, 기명 타입이나 다른 복합 타입을 포함할 수 있다.

ex) function, tuples

(Int, (Float, Float) => Int 기명 타입과 (Float, Float) 복합 타입을 가지는 튜플

- 점근적 분석

1. 삽입 정렬

2. 병합 정렬

: 소규모 입력 데이터에서는 삽입 정렬 알고리즘이 더 빠르지만 대규모 입력 데이터에서는 병합형 정렬 알고리즘이 훨씬 더 빠르다

0개의 댓글