일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- OS
- docker
- jvm
- java
- MAC address
- log
- CSV
- Spring
- Python
- Trino
- Packet
- EC2
- ip
- zookeeper
- kubernetes
- helm
- Kafka
- Operating System
- grafana
- aws s3
- tcp
- JavaScript
- airflow
- PostgreSQL
- CVAT
- Vision
- AWS
- kubectl
- kubeadm
- Network
Archives
- Today
- Total
JUST WRITE
List vs Array 본문
이 글은 책 알고리즘 도감에서 List, Array 부분을 정리한 글입니다.
List
데이터를 일직선으로 나열한 형태
추가/삭제는 쉽지만 원하는 데이터에 접근하려면 시간이 많이 걸림.
- 각 데이터에는 pointer가 존재, 다음 데이터의 메모리 위치
- 메모리 상의 연속된 위치에 저장하지 않아도 됨.
- Sequential Access(순차 접근) => 처음부터 순서대로 접근 => 탐색 시간이 오래 걸림.
- 추가/삭제 시 pointer만 변경
- 계산 시간
- 검색 => 접근하고자 하는 데이터가 가장 뒤에 있는 경우, 선형 탐색 => O(n)
- 추가 => 두 개의 pointer만 변경, n에 관계없음 => O(1)
원형 List
마지막 데이터의 pointer가 선두 데이터의 메모리 위치 가리킴
양방향 List
- 보통 pointer 하나만 가지고 있지만 데이터가 2개의 pointer를 사용해서 앞/뒤 데이터를 가리킴.
- 앞/뒤 데이터를 가리키니 추적이 쉬움.
- pointer 저장 영역이 커짐.
- 추가/삭제 시 변경해야할 pointer가 많아짐.
Array
데이터를 1열로 나열한 형태
데이터 접근은 쉽지만 추가/삭제는 시간이 많이 걸림.
- 연속된 메모리 영역에 순서대로 저장.
- Random Access(임의 접근) => 연속된 영역이라 메모리 주소 계산 가능 => 바로 접근 가능
- 추가 => 공간 확보 필요, 다른 데이터 이동 필요
- 계산 시간
- 검색 => 임의 접근 => O(1)
- 추가 => 선두에 데이터 추가 시 모든 데이터 이동 => O(n)
Name | Access | Add | Delete |
List | 느림 | 빠름 | 빠름 |
Array | 빠름 | 느림 | 느림 |
728x90
반응형
'Programing > Algorithm' 카테고리의 다른 글
HashTable (0) | 2022.02.14 |
---|---|
Stack vs Queue (0) | 2021.10.04 |
What is Algorithm? (0) | 2021.10.03 |
Comments