데이터의 기본 종류에는

  • Contiguous data structures는 연속적으로 또는 인접한 메모리 섹터에 데이터를 저장하는 것을 의미한다. 이와 같은 예로는 Array, Heaps, Matrices, Hash table등이 존재합니다.
  • Linked data Structures는 Pointers에 의해 묶여 있는 메모리의 구분된 섹터로 구성됩니다. 예들은 리스트, 트리, 그래프를 포함합니다.

Contiguous data structures

  1. Arrays

가장 단순한 형태인 선현적인 Array이는 1차원적인 array입니다.

이와 같은 형태입니다. 각 element는 ai라는 형태를 띄게 되며 여기서 i는 정수 값으로서 0~n까지의 값을 가지게 됩니다. 고차원적인 array이는

와 같은 형태를 가지게 됩니다. 여기서의 aij는 i는 row의 값을 j는 column의 값을 가지게 됩니다.

스위프트에서 array를 선언할 수 있는 방법은 3가지가 있습니다.

  1. var array1: Array = [1,2,3,4,5]
  2. var array2: [Int] = [1,2,3,4,5]
  3. var array3 = [1,2,3,4,5]

와 같은 방식으로 배열을 정의할 수 있습니다. 3번째와 같은 방식은 타입을 추론하는 것으로 compile 단계에서 여러분이 입력한 값의 타입을 추론하여 타입을 결정하게 되는 것입니다. 3번째와 같은 방식을 우리는 주로 사용하게 될 것입니다.

지금까지는 1차원적인 Array이였다면 이제는 고차원적인 array를 한번 만들어 보겠습니다.

간단합니다. array를 사위 array로 묶어 주면서 만들어 주면 됩니다. 예를 들어서..

  • var array4 = [[1,2],[3,4],[5,6]]

와 같이 만들어 주면 됩니다.

인자 추출하기

var myIntArray = [1,2,3,4,5] 와 같이 정의 했고 우리가 만약 index값을 알고 있다면 이를 쉽게 추출할 수 있습니다.

myIntArray[1]

또는 for - in loop를 통해서 전체 값을 순환 할 수도 있을 것입니다.

for element in myIntArray { print(element) }

특정 범위의 인덱스 값을 가져올 수도 있습니다.

var someSubset = myIntArray[2...4] print(someSubset)

2차원적인 array를 생성해 보도록 하겠습니다.

var my2DArray = [[1,2],[3,4],[5,6]]

var element = my2DArray[0][0] var element2 = my2DArray[1][1]

Adding elements

다양한 method를 통해서 adding 할 수 있는데 먼저 뒤에 붙이는 것, 특정 index에 넣는 것을 보겠습니다.

var array2 = [1,2,3,4,5] array2.append(7) print(array2) array2.insert(6, at: 5) print(array2)

elements 지우기

이미 선언한 array2에서 element를 지워보도록 하겠습니다.

array2.removeLast() print(array2)

특정 인덱스의 element를 지울 수도 있습니다.

array2.remove(at: 5) print(array2)

'DataStructure' 카테고리의 다른 글

Array  (0) 2017.03.26

DataStructure를 왜 사용하는가?

Array를 사용하는 이유는 이렇게 생각해 볼 수 있다. 예를 들어서, 우리가 관리해야 하는 data들이 많아 지게 되면 이를 관리하기 위한 방법을 생각하게 될 것이다. 이를 쉽게 관리하기 위해서 우리는 유사한 데이터들을 특정한 조건으로 모으는 과정을 거치게 될 것이고 분류된 하나의 덩이리가 또 다른 조건으로 분류되는 과정을 거치게 되고 이와 같이 데이터를 묶는 방식에 대한 개념을 우리는 데이터의 구조화라고 합니다.

쉬운 예를 들어 보겠습니다. 학교를 예로 들어보면 학생이 3명이었던 시골 학교가 인근에 산업 시설이 들어서게되고 고속도로와 같은 인프라가 형성되어 학생들의 수가 500명으로 늘어 났다고 생각해 봅시다. 학교측의 입장에서는 학생들을 관리하기 위해서 동일한 나이의 학생들을 먼저 "학년"이라는 기준으로 묶고, 같은 학년의 학생들 중 유사한 각반 별로 학력 수준이 고루 퍼질 수 있도록 "반"을 배치하도록 합니다. 각 반에서는 학생들 고유의 "번호"를 부여하여 선생님의 입장에서 더욱 관리하게 쉽게 되겠지요. 이와 같은 것을 우리는 데이터를 구조화 했다라고 생각할 수 있는 것입니다.

이와 같은 데이터를 구조화하는 방법들에 대해서 우리는 배울 것입니다. 준비 되셨으면 이제 시작해 보도록 하겠습니다.

Array

데이터를 구조화하는 방법 중 Array라는 것이 있습니다. Java라는 언어를 기준으로 우리는 학습할 것이기 때문에 Array를 만드는 방법 부터 살펴 볼 필요가 있습니다.

Int numbers1 = new Int[4];

numbers1[0] = 1;

numbers1[1] = 2;

numbers1[2] = 3;

numbers1[3] = 4;

용어를 먼저 설명해 보도록 하겠습니다. Element, Index, Value가 가지는 의미는 우리가 알 고 있어야 합니다. Index는 앞선 예에서 말을 해보면 학생들의 번호라고 생각하면 됩니다. Value는 그렇다면 학생들의 이름이라고 생각하면 됩니다. 여기서 더 나아가면 index와 value가 묶여 있는 것을 하나의 element라고 생각하시면 됩니다. 이제는 Array를 조금 더 쉽게 만들어 보도록 하겠습니다.

Int numbers2 = new int[]{1,2,3,4,}; 또는 Int numbers3 = {1,2,3,4}; 와 같이 만들 수도 있습니다.

Array와 함께 쓰이는 반복문

배열의 존재 목적은 데이터를 구조화해서 반복적인 일을 컴퓨터에게 일임하기 위해서 우리는 코딩이라는 것을 하게 됩니다. 반복문 중 while문과 for - in 문에 대해서 알아 보도록 하겠습니다. while(numbers1.lenght > i) { System.out.println(numbers1[i]); i++1; } 와 같이 사용할 수도 있고, 동일한 결과값을 가지는 for(i=0;i>numbers.1lenght;i++){ System.out.println(numbers1[i]); } 와 같이 사용할 수 있습니다.

Array의 장, 단점

Array는 생성될때 크기가 정해지게 되므로 index값을 넘어서는 수를 호출하게 되면 오류를 발생시키며, Element의 더이상의 추가도 불가능하다는 단점을 가지게 됩니다. 또한, 다른 데이터 구조에 비해서 기능도 현저히 작은 편입니다. 하지만 우리는 이것을 왜 쓸까요? 기능도 상대적으로 적고, 활용가능성도 제한적이지만 이러한 특징들을 다시 작고 가볍다는 특징, 더불어 메모리를 적게 차지한다는 장점을 가지게 되어, 부품의 최소단위로서의 활용도를 극도로 높이게 된다는 장점을 가집니다.

다음으로 List에 대해서 배워 보도록 하겠습니다.

'DataStructure' 카테고리의 다른 글

Fundamental data structures  (0) 2017.03.27

+ Recent posts