용어
배열
配(나눌 배) 列(벌일 열) / 排(밀칠 배) 列(벌일 열)
array (집합체, 배열, 배열하다, 정렬시키다)
의미
1. 일정한 차례나 차례나 간격에 따라 벌여 놓음
2. 동일한 성격의 데이터를 관리하기 쉽도록 하나로 묶는 일을 의미한다.
비슷한 말로 '배치', '나열', '열거', '진열'이 있다.
개인적 고찰
조금만 생각해보면 배열은 깊이 따져보지 않아도 납득할 수 있을 만큼 직관적이다.
우리는 '낱개'는 자연스럽게 인식하지만 '여러 개'는 한 번에 받아들이지 못한다.
인간이 한 번에 받아들일 수 있는 숫자는 7개로(편차+-2) 소위 '매직넘버'라고 하는데
이를 넘으면 인지할 때 절차를 필요로 한다. 직관에서 논리로 넘어가게 되는 것이다.
그렇기 때문에 여러 개를 효율적으로 다룰 수 있는 방법을 고민하게 되고
그중 가장 원초적인 관리방법이 바로 '나열'이다.
또 한 가지는 인간은 추상화, 개념화가 가능한 고등동물이다.
대상을 공통점이나 특징을 바탕으로 분류해 묶어놓음으로 정보를 축적한다.
이렇게 점점 체계를 만듦으로 직관으로는 수용할 수 없는 방대한 정보를 수용하게 된다.
묶음을 만드는 것(그룹화하는 것, Grouping)은 어쩌면 본능이 아닐까?
결론
배열은 데이터를 저장하는 가장 기초적인 방법이므로 자료구조에서 가장 먼저 배운다.
정리하자면 배열은 같은 자료형으로 그룹핑한 하나의 공간이다.
특징
정적인 자료구조
index와 value의 쌍으로 구성
첨자를 이용하여 데이터에 접근(a[0]).
반복적인 데이터 처리 작업에 적합한 구조.
사용한 첨자의 개수에 따라 n차원 배열이라 한다(1차원 a[0], 2차원 a[0][0], 3차원 a[0][0][0])
구조
장점
구현이 쉽다.
인덱스를 이용해 접근이 가능해 검색 성능이 좋다.
데이터의 크기가 확정적일 때 배열을 사용하는 것이 메모리나 처리속도 면에서 좋다.
데이터마다 동일한 이름의 변수를 사용하여 처리가 간편하다.
연속된 메모리 공간에 존재하기 때문에 관리하기가 편하다.
단점
삽입과 삭제가 어렵고 오래 걸린다.
-원소를 삽입하거나 삭제할 경우, 다음 항목의 모든 요소를 이동시켜야 한다.
-이를 위한 연산 작업이 수행되어 비효율적이다.
-자료의 수에 비례하여 성능이 떨어지게 된다.
배열의 크기를 바꿀 수 없다.
-크게 잡을 경우 메모리가 낭비된다.
-작게 잡을 경우 그 이상의 자료를 저장하지 못한다.
메모리의 재사용이 불가능하다.
-배열은 초기 사이즈만큼의 메모리를 할당받아 사용하기 때문에
데이터의 존재 유무와 관계없이 그만큼의 메모리를 사용한다.
-이미 삭제된 데이터여도 (배열 요소 삭제) 배열 자체를 제거하지 않는 이상 삭제된 공간의 메모리 재사용은 불가능하다.
사용법(C언어)
선언(메모리에 공간 할당)
자료형(int, char 등) 변수 이름[개수]
ex) int grade[2]
초기화(맨 처음 값 설정)
선언 후 대입 or 선언할 때 설정
ex) grade[0] = 9, grade[1] = 10 or int grade[2] = {9, 10}
파이썬은 배열이 없고, 배열 대신 리스트를 사용한다.
하지만 파이썬의 리스트가 배열을 기초로 만들어졌고 배열이 모든 자료구조의 기초이므로 알아두어야 한다.
refference
https://www.youtube.com/watch?v=REoh0xg2aCI
https://seoyeonhwng.medium.com/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-f04847b58286 https://ko.wikipedia.org/wiki/%EB%A6%AC%EC%8A%A4%ED%8A%B8_(%EC%BB%B4%ED%93%A8%ED%8C%85)
http://www.tcpschool.com/c/c_array_oneDimensional
'CS & CE & DS & DA 공통 > 자료구조(Data Structure)' 카테고리의 다른 글
자료구조02_리스트 (0) | 2022.06.16 |
---|---|
자료구조(Data Structure)와 추상자료형(Abstract Data Type) (0) | 2022.06.16 |
자료구조 개관 (Data Structure Overview) (0) | 2022.06.02 |