1 분 소요

배열

메모리 한 덩어리라는 표현 (연속된 데이터 집합)
여러 데이터 (같은 타입)을 연속하여 세워 놓은 자료구조
각 자료의 데이터 타입의 크기를 알기에 해당 데이터 타입의 크기만큼 점프하여 인덱스로 접근 가능
동적 배열?
임의의 크기로 데이터가 늘어나는 list 등의 경우,
내부에서 현재 요소의 개수가 총 용량(Capacity)가 넘는 경우,
새로운 크기의 배열을 생성하고 기존 배열의 데이터를 복사하는 방식을 취한다
배열 요소의 삽입
기본적으로는 맨 뒤 쪽의 요소에 추가하는 경우는 O(1)의 복잡도를 가진다.
(어느 순간에도 뒤에 하나 놓으면 되기에)
다만 그 외의 경우는 삽입 하려는 위치 뒤쪽의 모든 요소를 한 칸씩 밀어야 하므로
O(n)의 복잡도를 가진다.
배열 요소의 삭제
삽입과 비슷하다. 가장 끝에 있는것을 삭제한다면 바로 지울 수 있으나
그 외의 경우는 삭제 후, 나머지 요소를 앞으로 당겨와야 하기에 O(n)의 복잡도를 가진다
배열 요소의 접근
인덱스만 알면 바로 접근이 가능하다 (O(1))
배열 요소의 검색
모든 배열의 요소를 검사해야 하므로 (O(n))
배열과 포인터
배열은 포인터로 참조할 수 있음!
(배열 a가 있다면 a는 배열의 첫번째 요소를 가리키는 포인터변수와 유사함)
다만 배열 변수의 경우는 sizeof() 등의 함수로 배열 전체의 크기를 구할 수 있으며,
기본적으로 해당 배열을 가리키는 것을 바꿀 수 없음
(ex : int a[5] , int b[5] 가 있을 시 , a = b는 오류를 내뱉음)

문자열

일반적으로 문자(char)의 모임이며, ‘자료형’으로 분리되나
기본적인 자료형들과는 꽤나 차이가 있는 타입이다

문자열의 크기
문자열의 크기는 정해져 있지 않다
‘hell’과 ‘hello’ 의 크기가 서로 다르듯!
데이터 크기 정해져 있지 않은 점이 일반적인 자료형과 가장 큰 차이점을 가진다
그렇기에 컴퓨터는 ‘문자’의 ‘배열’로 문자열을 인식한다
C에서는 추가적으로 ‘null 문자 : ‘\0’‘를 통해 문자열의 끝을 인식한다
(‘null 문자 사용 이유’? 일반적으로 ‘배열’은 자기 자신의 크기를 모르기에 해당 문자를 통해 ‘끝’을 알려줌)
(여담으로 다른 언어에서는 추가적으로 ‘길이’를 저장하여 해당 문제를 방지하였음)
(다만 이 방식은 추가적으로 ‘길이’를 저장한다는 단점이 있다)

댓글남기기