| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- tcp
- Packet
- aws s3
- zookeeper
- MAC address
- CVAT
- Network
- Python
- OS
- log
- java
- PostgreSQL
- airflow
- kubeadm
- grafana
- Spring
- Vision
- docker
- ip
- CSV
- kubernetes
- Operating System
- Trino
- helm
- JavaScript
- AWS
- EC2
- Kafka
- jvm
- kubectl
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