반응형
해당 글에서는 알고리즘 중 선형 배열에 대해 이해를 돕기 위해 작성한 글입니다.
1) 선형 배열(Linear Array)
💡 선형 배열(Linear Array) 이란?
- 데이터 요소들이 ‘일렬로 연결되어 있는 배열’을 의미합니다.
- 각 요소들은 인덱스라는 고유한 숫자로 식별되며 배열을 선언할 때 각 요소에 데이터 타입과 배열의 길이를 지정해야 합니다.
[ 더 알아보기 ]
💡 비선형 배열(Non-Linear Array)
- 데이터를 일렬로 나열하지 않고, 특정한 규칙에 따라 구조를 형성하는 배열을 의미합니다.
- 대표적인 비선형 배열로는 트리(tree)와 그래프(graph)가 있습니다. 트리는 부모-자식 관계를 가진 노드들이 연결된 구조이며, 그래프는 노드와 간선(edge)으로 이루어진 구조입니다.
2) 선형 배열(Linear Array), 선형 구조(Linear structure), 선형 탐색(Linear Search)
💡 선형 구조(Linear structure)란?
- 데이터가 일렬로 나열되어 있을 뿐만 아니라 ‘데이터 간에 순서’가 있고 논리적으로 이어져 있는 구조를 의미합니다.
💡 선형 배열과 선형 구조(Linear structure)는 무슨 관계일까?
- 선형 배열의 경우는 데이터의 요소들이 일렬로 되어 있는 배열을 의미하며 요소마다 고유한 인덱스로 식별이 됩니다. 이에 반해 선형구조는 일렬로 나열되어 있을 뿐만 아니라 데이터 간에 순서가 있고 논리적으로 이어져 있는 구조를 의미합니다.
- 즉 선형 구조에는 선형 배열이 포함되며 외에 링크드 리스트, 스택, 큐 등 다양한 자료구조가 포함이 됩니다.
[참고] 선형구조에 대해 더 이해하고 싶으시면 아래의 글을 참고하시면 도움이 됩니다.
💡 선형 탐색(Linear Search)이란?
- 배열이나 리스트의 처음부터 끝까지 하나씩 값을 비교하면서 찾는 값을 찾을 때까지 탐색하는 방법입니다.
💡 선형 배열과 선형 탐색(Linear Search)은 무슨 관계일까?
- 선형 배열의 경우 데이터를 일렬로 저장하는 ‘자료구조’이며 선형 탐색의 경우는 선형 배열을 이용하여 처음부터 끝까지 순서대로 탐색하는 알고리즘입니다.
[참고] 선형 탐색에 대해 더 이해하고 싶으시면 아래의 글을 참고하시면 도움이 됩니다.
[ 더 알아보기 ]
💡 선형 구조, 선형 배열, 선형 탐색은 서로 어떤 관계 일까?
- 선형 구조와 선형 배열의 경우 ‘자료구조’이며 선형 탐색의 경우 ‘알고리즘’입니다.
- 선형 구조 내에는 선형 배열이 존재합니다. 이 선형 배열에서 데이터를 찾기 위한 방법으로는 ‘선형 탐색’을 이용하는 데 사용이 됩니다.
3) 선형 배열의 종류
💡 선형 배열을 이용하여 데이터를 효율적으로 관리할 수 있습니다. 각각의 상황에 따라 선형배열을 선택합니다.
1. 일반 배열(Array)
💡일반 배열(Array)
- 가장 기본적인 배열로 ‘고정된 크기’를 가지며 동일한 데이터 타입만 저장할 수 있습니다.
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
메서드 | 설명 |
clone() | 배열의 복사본을 생성 |
length | 배열의 길이를 반환 |
sort() | 배열을 정렬 |
fill() | 배열의 모든 요소를 특정 값으로 초기화 |
binarySearch() | 이진 검색을 수행하여 배열에서 지정된 값의 인덱스를 반환 |
equals() | 배열이 지정된 객체와 같은지 여부를 확인 |
toString() | 배열의 문자열 표현을 반환 |
2. 가변 배열(ArrayList)
💡가변 배열(ArrayList)
- ‘가변 된 크기’를 가지며 동적으로 크기를 조정할 수 있는 배열로 객체만 저장할 수 있습니다. 가변적인 크기를 가지기에 추가/삭제가 빈번하게 일어나는 경우에 사용하면 유용합니다.
[ 더 알아보기 ]
💡 객체(Object)란?
-기본 자료형(int, double, char 등)을 제외한 것들을 의미합니다. 기본 자료형을 래핑(박싱)하면 객체로 사용할 수 있습니다. Integer, String, Character 등을 의미합니다.
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
메서드 | 설명 |
add() | ArrayList에 요소를 추가 |
addAll() | 지정된 컬렉션의 모든 요소를 ArrayList에 추가 |
remove() | ArrayList에서 지정된 요소를 제거 |
removeAll() | 지정된 컬렉션의 모든 요소를 ArrayList에서 제거 |
contains() | ArrayList가 지정된 객체를 포함하는지 여부를 확인 |
indexOf() | ArrayList에서 지정된 객체의 인덱스를 반환 |
size() | ArrayList의 요소 수를 반환 |
3. 연결 리스트(LinkedList)
💡 연결 리스트(LinkedList)
- 노드라는 객체를 이용하여 데이터를 저장하는 자료구조로, 가변 배열과 마찬가지로 크기를 동적으로 조정할 수 있습니다. 객체의 추가/삭제가 빈번하게 일어나는 경우에 사용하면 유용합니다.
LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
메서드 | 설명 |
add() | LinkedList에 요소를 추가 |
addFirst() | LinkedList의 맨 앞에 요소를 추가 |
addLast() | LinkedList의 맨 뒤에 요소를 추가 |
remove() | LinkedList에서 지정된 요소를 제거 |
removeFirst() | LinkedList의 첫 번째 요소를 제거 |
removeLast() | LinkedList의 마지막 요소를 제거 |
contains() | LinkedList가 지정된 객체를 포함하는지 여부를 확인 |
get() | LinkedList에서 지정된 인덱스에 해당하는 요소를 반환 |
4) 선형 배열의 장단점
1. 선형 배열의 장점
번호 | 장점 |
1 | 데이터의 불규칙한 삽입/삭제가 없기 때문에 데이터에 접근 속도가 빠르다. |
2 | 인덱스를 활용하여 빠른 검색이 가능하다. |
3 | 크기를 미리 지정하므로 메모리 관리가 용이하다. |
2. 선형 배열의 단점
번호 | 단점 |
1 | 데이터의 삽입/삭제가 불편하다. |
2 | 배열의 크기를 변경하기 어렵다. |
3 | 메모리 공간을 미리 할당해야 하므로 사용하지 않는 공간이 발생할 수 있다. |
5) 선형 배열을 이용한 예시
1. 가변 배열을 원하는 개수로 재구성 방법
2. 가변 배열의 요소를 채우는 방법
3. 가변/동적 배열을 비우는 방법
4. 가변/동적 배열을 정렬 방법
5. 가변 배열을 동적 배열로 변경 혹은 동적 배열을 가변 배열로 변경 방법
오늘도 감사합니다. 😀
반응형
'Java > 알고리즘 & 자료구조' 카테고리의 다른 글
[Java/알고리즘] 완전 탐색(Exhaustive Search) 이해하기 -2 : 종류 별 이해 (1) | 2023.06.03 |
---|---|
[Java/알고리즘] 완전 탐색(Exhaustive Search) 이해하기 -1 : 정의 및 종류 (2) | 2023.06.03 |
[Java/알고리즘] 재귀 함수(Recursion Function) 이해하기 (0) | 2023.05.31 |
[Java/알고리즘] 선형 탐색(Linear Search) 이해하기 (2) | 2023.05.29 |
[Java/알고리즘] 이진 탐색(Binary Search) 이해하기 (2) | 2023.05.22 |