본문 바로가기

컴퓨터 언어/자료구조

[C#] 배열과 리스트

[배열(Array)]

 

배열은 동일한 유형의 여러 요소를 순차적으로 저장하는 자료 구조이다. 배열에 저장된 각 요소는 배열 내에서 고유한 위치에 있는 인덱스로 식별할 수 있다. 그리고 이 인덱스를 사용하여 배열의 특정 요소에 직접 접근할 수 있다.

배열을 초기화 할 때 정한 크기는 소멸될 때까지 유지된다.

 

위와 같이 선언과 접근이 가능하다

 

 

배열의 요소들은 메모리 구조상으로 시작 부분부터 연속적으로 구성되어 있기 때문에 C++의 경우 포인터, 즉 주소 값에 대한 참조에 산술 연산자를 사용하여 직접적으로 배열의 요소에 접근할 수도 있었다.

C#에서는 포인터를 사용할 수 없기에 C++을 통해 메모리 구조상의 배열에 대해 간접적으로 이해할 수 있었다.

 

 

 

 

[선형 리스트(List)]

 

선형 리스트는 시작시 크기가 고정되는 배열과 다르게 런타임 중에 크기를 조절할 수 있는 배열 기반의 자료구조를 뜻한다.

배열 요소의 갯수를 특정할 수 없을 때 사용하고 중간에 요소를 추가하거나 삭제할 때 다른 자료구조에 비해 효율적이다.

특히 중간에 요소를 추가하거나 삭제하는 데에 빅O 표기법으로 O(1)의 시간이 걸리기 때문에 이점상 다른 자료구조들에 비해 많이 사용되어진다.

 

 

동적 배열에 요소 추가

 

직접 해당 인덱스에 해당하는 정보를 넣어야 하는 배열과 다르게 동적 배열인 리스트는 Add 함수를 통해 손쉽게 정보가 있는 마지막 인덱스의 다음 칸에 데이터를 추가할 수 있다. 데이터가 추가됨으로써 기존에 설정되었던 최대 수용량이 차게 되는 경우 리스트는 기존 배열보다 큰 크기의 배열을 자동으로 생성하여 새로 생성된 배열에 자료를 옮긴 후 참조를 새로 새성된 배열로 바꾸는 작업을 실시한다.

이렇게 옮겨지고 난 후 기존에 사용하였던 배열은 더 이상 사용하지 않으므로 가비지 컬렉터가 자동으로 기존의 배열을 지우고 공간을 만드는 과정을 갖게 된다.

 

 

리스트는 Remove를 통해 직접 해당 데이터를 지울 수 있고 RemoveAt으로 인덱스에 해당하는 데이터를 삭제 할 수도 있는데 이렇게 중간에 껴있는 데이터를 삭제한 경우 리스트는 다음 인덱스에 위치한 정보들을 차례대로 앞으로 땡겨서 중간에 빈 공간이 생기지 않도록 자동으로 관리 또한 해준다.

 

 

실제로 위의 Remove부터 데이터 수정이라는 값으로 변경까지 했을 경우 인덱스 [0]과 [1]은 비어있는 것이 아니라 뒤에서 앞으로 데이터가 땡겨지기 때문에 foreach를 통해 접근할 경우 빈칸이 출력되는 것이 아닌 2번 인덱스부터의 값이 0번 인덱스부터 나오게 된다 .

'컴퓨터 언어 > 자료구조' 카테고리의 다른 글

[C#] 해시테이블  (0) 2023.11.20
[C#]우선순위 큐와 힙  (0) 2023.11.17
[c#] 스택과 큐  (0) 2023.11.15
[C#] 연결 리스트  (0) 2023.11.13