일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 클린코드
- mysql
- CleanCode
- 리스트
- 마크다운 테이블
- WebClient
- 내부 정렬
- 정렬
- java
- 인터페이스
- 클린
- 빅 오 표기법
- 클래스
- 자료구조
- 스택 큐 차이
- 마크다운
- query
- 트리
- 쿼리메소드
- @RequiredArgsConstructor
- JsonNode
- 선형 리스트
- 배열
- @NoArgsConstructor
- code
- 연결 리스트
- 코드
- 계산 검색 방식
- @ComponentScan
- 쿠키
- Today
- Total
Developer Cafe
배열 vs 연결 리스트 차이 그리고 노드, 이중 연결 리스트 본문
노드
연결 리스트는 서로 인접 하지 않은 메모리 셀 묶음으로 이뤄진다.. 컴퓨터 메모리 전체에 걸쳐 여러 셀에 퍼져 있을 수 있다. 서로 인접하지 않은 이러한 셀을 노드라 부른다.
"a" | 1652 | "b" | 1983 | "c" | null |
1000 | 1001 | 1652 | 1653 | 1983 | 1984 |
배열 vs 연결 리스트 차이
- 연결 리스트를 다루는 코드는 항상 첫 번째 노드가 메모리 어디에서 시작하는지 알고 두번째 세번째 링크를 따라 나머지 리스트를 검색할 수 있다.
- 연결 리스트가 배열보다 나은 점 중 하나는 프로그램이 데이터를 저장하기 위해 메모리 내에 나란히 이어진 빈 셀 묶음을 찾을 필요가 없다는 점이다.
연산 | 배열 | 연결 리스트 |
읽기 | O(1) | O(N) |
검색 | O(N) | O(N) |
삽입 | O(N)(끝에서 하면 O(1)) | O(N)(앞에서 하면 O(1)) |
삭제 | O(N)(끝에서 하면 O(1)) | O(N)(앞에서 하면 O(1)) |
검색과 삽입, 삭제는 차이가 거의 없는것처럼 보이고 배열 읽기만 연결 리스트 읽기보다 훨씬 빠르다.
하지만 한 리스트를 검사해서 많은 원소를 삭제할 때는 연결 리스트가 배열보다 훨씬 낫다.
예를 들어 메일 주소를 찾아 유효하지않은 이메일 형식을 삭제하려고 할때
배열일 경우(메일 1000개)
- 읽기(1000단계) + 삭제 약 100,000단계(유효하지 않은 이메일 100개 * N개)
연결 리스트일 경우(메일 1000개)
- 읽기(1000단계) + 삭제 약 100단계(유효하지 않은 이메일 100개)
- 리스트 전체를 살펴보면서 삭제가 필요하면 그저 그 노드의 링크가 적절한 노드를 가르키게바꾸기만하면 되기에
O(1)단계만 걸린다.
이중 연결 리스트
연결리스트는 큐와도 조화로운데 큐는 데이터를 리스트 끝에 삽입한다.
삽입일 경우 연결리스트는 O(N)단계, 배열은 O(1)로 배열이 더 효율적이다. 하지만, 큐에서의 삭제는 앞에서부터 삭제하므로 O(N)걸리는 배열과 달리 O(1)걸리는 연결 리스트가 더 효율적이다. 여기서 특수한 연결 리스트 변형을 사용하면 삽입, 삭제도 모두 O(1)단계로 할 수 있다.
'자료 구조 > 누구나 자료 구조와 알고리즘' 카테고리의 다른 글
그래프 (0) | 2021.03.08 |
---|---|
이진 트리 (0) | 2021.03.08 |
퀵 정렬 vs 삽입 정렬 차이 (0) | 2021.03.07 |
재귀 알고리즘 (0) | 2021.03.07 |
스택 vs 큐 차이 (0) | 2021.03.06 |