| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- ROS2
- Data Science
- file system
- cs231n
- CPP
- CNN
- RNN
- do it! 알고리즘 코딩테스트: c++편
- C++
- Humble
- Operating System
- DFS
- Baekjoon
- computer vision
- Machine Learning
- ubuntu 22.04
- Linux
- assignment1
- Optimization
- Gentoo2
- 밑바닥부터 시작하는 딥러닝2
- Seoul National University
- On-memory file system
- System Call
- assignment2
- Process
- BFS
- SQLD
- Python
- deep learning
Archives
- Today
- Total
newhaneul
[Seoul National Univ: Data Science] Lecture 4. Arrays & Linked Lists 본문
2. Artificial Intelligence/Seoul National Univ. Data Science
[Seoul National Univ: Data Science] Lecture 4. Arrays & Linked Lists
뉴하늘 2025. 12. 7. 20:09728x90
본 포스팅은 서울대학교 이준석 교수님의 M2480.001100 Principles & Applications of Data Science을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.
https://youtu.be/647aZztdsb0?si=YLRU39A9zVc_lvRp
1. Array
메모리 구조
- 데이터가 연속된 메모리에 저장됨
- A[0], A[1], ... A[n-1]
장점
- Random access: O(1) 내에서 임의의 위치에 접근할 수 있다.
단점
- 중간에 삽입 및 삭제하면 뒤 원소들을 전부 한 칸씩 밀거나 당겨야 해서 O(N)이 된다.
- 불필요한 메모리 공간이 사용된다.
2. Singly Linked List
메모리 구조
- 각 노드가 메모리 공간 내에 흩어져 있고 포인터 변수 "next"로 이어진다.
- 보통 head 포인터 하나로 시작 노드를 가리킨다.
장점
- 필요할 때마다 동적으로 메모리를 할당하여 노드를 연결하면 된다.
- 노드의 위치를 알고 있을 때 삽입 및 삭제 연산은 O(1)이 된다.
- 중간에 삽입 및 삭제를 할 때 모든 노드를 변화시키지 않아도 된다.
단점
- 포인터 변수를 저장하기 위해 추가적인 공간을 할당해야 한다.
- Random access: 임의의 위치에 접근하려면 이전 노드까지 순회를 해야한다.
3. Doubly Linked List
메모리 구조
- 각 노드가 메모리 공간 내에 흩어져 있고 포인터 변수 "next"로 이어진다.
- 보통 header / trailer 더미 노드를 두고 구현한다.
장점
- 필요할 때마다 동적으로 메모리를 할당하여 노드를 연결하면 된다.
- 노드의 위치를 알고 있을 때 삽입 및 삭제 연산은 O(1)이 된다.
- 앞 뒤 양쪽으로 순회가 가능하다.
- 중간에 삽입 및 삭제를 할 때 모든 노드를 변화시키지 않아도 된다.
단점
- 노드마다 2개의 포인터 변수를 저장해야 하므로 Singly Linked List보다 메모리 오버헤드가 더 크다.
- Random access: 임의의 위치에 접근하려면 이전 노드까지 순회를 해야한다.
4. Applications of Linked Lists
1. 단일 연결 리스트의 중간 노드 찾기 (연결 리스트의 size가 제공되지 않는 경우)

- 한 칸씩 이동하는 slow와 두 칸씩 이동하는 fast를 구현
- 만약 fast가 끝 또는 직전에 도달하면 slow의 위치가 가운데가 된다.
2. 단일 연결 리스트 뒤집기

- 3개의 포인터 사용: prev, next, curr
- 초기 값: prev = NULL, curr = head로 시작
- 연결 방향 뒤집기: curr->next = prev
- 한 칸 이동: prev = curr, curr = next
- curr = NULL이 될 때까지 반복
- 마지막에 prev가 새로운 head
3. 연결 리스트에 사이클이 있는지 검사

- 한 칸씩 이동하는 slow와 두 칸씩 이동하는 fast 구현
- 만약 연결 리스트에 사이클이 없다면 fast는 언젠가 NULL에 도달한다. → cycle 존재 X
- 만약 사이클이 존재한다면 fast는 언젠가 slow와 만나게 된다. → cycle 존재
728x90
'2. Artificial Intelligence > Seoul National Univ. Data Science' 카테고리의 다른 글
| [Seoul National Univ: Data Science] Lecture 8. Hash Tables (1) | 2025.12.13 |
|---|---|
| [Seoul National Univ: Data Science] Lecture 7. Graphs (0) | 2025.12.11 |
| [Seoul National Univ: Data Science] Lecture 6. Trees (1) | 2025.12.10 |
| [Seoul National Univ: Data Science] Lecture 5. Stacks & Queues (0) | 2025.12.08 |
| [Seoul National Univ: Data Science] Lecture 3. Sorting (0) | 2025.12.06 |