[์๋ฃ๊ตฌ์กฐ] ์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked List)
๋ณธ ํฌ์คํ
์ ํ๋ฅ์ด์ ๊ฐ๋ฐ์ผ์ง ์คํฐ๋์ ์ฐธ์ฌํ๋ฉฐ ์ ๋ฆฌํ ๋ฌธ์์
๋๋ค.
๐๊ธฐ์ ๋ฉด์ ์ง๋ฌธ
Q. Linked List์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
A.
Linked List๋ ๋ฐ์ดํฐ์ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ ํ๊ธฐ์ ์ข์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ฐพ์(ํ์) ๋ ์์ฐจ์ ์ผ๋ก ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฒ์ ํ๋ ๊ฒ์ ๋๋ฆฝ๋๋ค.
๊ทธ๋์ ๋ฐ์ดํฐ์ ์ ์ถ๋ ฅ์ด ๋ง์ ๋ Linked List๋ฅผ ์ฌ์ฉ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Q. Array์ Linked List์ ์ฐจ์ด๊ฐ ๋ฌด์์ธ๊ฐ์? (N์ฌ ์ ํ๋ฉด์ )
- Array List
- ์ํ๋ ๋ฐ์ดํฐ์ ๋ฌด์์๋ก ์ ๊ทผํ ์ ์๋ค. (Random Access ๊ฐ๋ฅ)
- ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์์ผ๋ฉฐ, ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ ์ฌ์กฐ์ ํ๋ ๊ฒ์ ๋ง์ ์ฐ์ฐ์ด ํ์ํ๋ค.
-> (์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ญ์ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ)
- ๋ฐ์ดํฐ์ ์ถ๊ฐ/์ญ์ ๋ฅผ ์ํด์๋ ์์ ๋ฐฐ์ด์ ์์ฑํ์ฌ ๋ณต์ ํ๊ณ ์์ด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
- Linked List
- ๋ฆฌ์คํธ์ ํฌ๊ธฐ์ ์ํฅ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ค. -> (์ฐ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์๋๊ธฐ ๋๋ฌธ)
- ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ์๋ก์ด ๋ ธ๋๋ฅผ ์์ฑํ์ฌ ์ฐ๊ฒฐํ๋ฏ๋ก ์ถ๊ฐ/์ญ์ ์ฐ์ฐ์ด ๋น ๋ฅด๋ค.
- ๋ฌด์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์์ฐจ ์ ๊ทผ๋ง์ด ๊ฐ๋ฅํ๋ค. ->(์ผ๋ฐ์ ์ผ๋ก ์ด์ ๋ ธ๋์ ํฌ์ธํฐ๊ฐ ์๋ค.)
A.
Array | Linked List | |
๋ฐ์ดํฐ ์ ๊ทผ ๋ฐฉ์ | Random Access (์ธ๋ฑ์ค ํตํด ์ง์ ์ ๊ทผ ๊ฐ๋ฅ) |
Sequential Access (์์ฐจ์ ๊ฒ์ํ์ฌ ํ์) |
ํน์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์๊ฐ๋ณต์ก๋ | O(1) | O(N) |
๋ฐ์ดํฐ ์ ์ฅ๋ฐฉ์ | ์ฐ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (๋ฐ์ดํฐ๊ฐ ์ธ์ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ฐ์ด์ด ์ ์ฅ) |
์๋ก์ด ์์์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์น ์ฃผ์๊ฐ ์ด์ ์์์ ์ ์ฅ |
์ฝ์ , ์ญ์ ์๊ฐ๋ณต์ก๋ | O(N) | O(1) |
๋ฉ๋ชจ๋ฆฌ ํ ๋น | ์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (์ ์ธ์ ์ปดํ์ผ ํ์์ ํ ๋น) (์ฆ, ์ ์ธ์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ) |
๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (๋ฐ์ดํฐ ์ถ๊ฐ์ ๋ฐํ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น) (์ฆ, ๋ฐ์ดํฐ ์ฝ์ ์๋ง๋ค ์ฆ๊ฐ) |
Stack ์น์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น | Heap ์น์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น |
Linked List๋?
๐ก ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋ฐฐ์ด์ ์๋ก์ ์ฅ๋จ์ ์ ๋ณด์ํด์ฃผ๋ ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์, ๋ณดํต ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ค๋ช ํ ๋์๋ ๋ฐฐ์ด๊ณผ ๋ฌถ์ด์ ์ค๋ช ํ๋ค.
Array
์ฐ์์ ์ธ ๊ณต๊ฐ์ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ
์ฅ์
- ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ด ํน์ง ๋๋ถ์ index๋ฅผ ํตํ ์ ๊ทผ์ด ๋น ๋ฅด๊ณ ๊ฐํธํ๋ค๋ ํน์ง์ด ์๋ค.
๋จ์
- ๋ฐฐ์ด์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฒ์์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ ์ธํด์ผ ํ๊ณ , ํฌ๊ธฐ์ ์์ ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋นํจ์จ์ ์ด๋ค. ๋, ๋ฌดํ์ ๊ฐ๊น์ด ์๋ฃ๋ฅผ ์ ์ฅํ๋ ๋ฐ์๋ ๋ถ์ ํฉํ๋ค.
- ์ฒ์์ด๋ ๋ง์ง๋ง ๋ถ๋ถ์ด ์๋ ์ค๊ฐ ๋ฐ์ดํฐ์ ์ฝ์ /์ญ์ ๊ณผ์ ์์๋ ๋ฐ์ดํฐ๋ค์ ์ฌ๋ฐฐ์ดํ๋ ์ถ๊ฐ ์์ ์ด ํ์ํ๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ์ ์ด๋ ๋ฐ ๋ณต์ฌ๊ฐ ๋งค์ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ค๋ ํฐ ํ๊ณ๊ฐ ์๋ค.
Linked List
์๊ธฐ ์ฐธ์กฐ ๊ตฌ์กฐ์ฒด์ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฐ์ฐ์ ์ด์ฉํ ์๋ฃ๊ตฌ์กฐ
โ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ๊ฒ์ด ์๋, ๋จ์ด์ง ๊ณต๊ฐ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐ์์ผ๋ ๊ฒ์ด๋ค.
โ ํฌ์ธํฐ๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ด ํน์ง์ด๋ฉฐ, ์ ํ ๋ฆฌ์คํธ์ ๋นํด ์๋์ ์ผ๋ก ๊ตฌํ์ด ์ด๋ ต๋ค.
โ ํ, ์คํ, ํด์ ํ
์ด๋ธ ๋ฑ ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ(์ถ์์๋ฃํ, ADT)์ ๊ธฐ๋ฐ์ด ๋๋ค.
์ฅ์
- ๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ, ํ์ํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฐ์ ํ ๋นํด์ ์ฌ์ฉํ๋ค.
- ์ค๊ฐ ๋ฐ์ดํฐ์ ์ฝ์ /์ญ์ ์์๋ ์ฐ๊ฒฐ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ฏ๋ก ๋ชจ๋ ๊ฐ์ ์ฌ๋ฐฐ์ดํ๋ ๋ฑ์ ์ถ๊ฐ์์ ์ด ํ์ํ์ง ์๋ค.
๋จ์
- ์์ฐจ์ ํ์์ผ๋ก ํน์ ์์น์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ๋นํด ํ์์๋๊ฐ ๋๋ฆฌ๋ค.
- ํ์ฌ ๋ฐ์ดํฐ์ ๋ค์ ๋ฐ์ดํฐ์ ๋ํ ์ฐ๊ฒฐ ์ ๋ณด๊น์ง ์ ์ฅํด๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์, ๋ณ๋์ ๊ณต๊ฐ์ด ํ์ํด์ ํจ์จ์ด ์ข์ง ์๋ค.
ํํ
โ {Node : (Data, link)}๊ฐ ํ๋์ ๋จ์๋ก์จ ์ ์ฅ๋๋ค.
โ ๋ฆฌ์คํธ์ ์ฒ์ : Head node
๋ฆฌ์คํธ์ ๋ : Tail node = End node
* ํต์ ๋ฌต์์ ์ผ๋ก, ๋ฐ์ดํฐ ์์ด ์์, ๋ ๋ง์ ์๋ฆผ
์๊ฐ๋ณต์ก๋
Array | Linked List | |
ํ์ (ํน์ ๋ฐ์ดํฐ) | O(1) | O(1) |
์ฝ์ /์ญ์ | O(N) | O(1) |
Linked List์ ์ฐ์ฐ
์ฝ์
- ๋ ธ๋๋ฅผ ์์ฑํ๊ณ , ์ฝ์ ํ๋ ค๋ ์์น๋ฅผ ์ฐพ๋๋ค.
- ์ฝ์ ํ ๋ ธ๋๋ฅผ NewNode๋ผ๊ณ ํ๋ฉด, NewNode๊ฐ ๊ทธ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
NewNode.next -> RightNode
- ์๋ก ์ฝ์ ํ ๋ ธ๋์ ์ด์ ๋ ธ๋๊ฐ ์๋ก์ด ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
LeftNode.next -> NewNode
์ญ์
- ํ์์ ํตํด ์ญ์ ํ๊ณ ์ ํ๋ ๋ ธ๋ (TargetNode)๋ฅผ ์ฐพ๋๋ค.
- TargetNode์ ์ผ์ชฝ ๋ ธ๋๊ฐ TargetNode์ ์ค๋ฅธ์ชฝ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
LeftNode.next -> TargetNode.next
- TargetNode๊ฐ RightNode๋ฅผ ๊ฐ๋ฆฌํค์ง ์๊ฒ ํ๋ค TargetNode.next -> NULL
Singly Linked List
๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์์์ ์ค๋ช ํ๋ฏ, ํ๋์ ๋ ธ๋ ์์๋ ์์ ์ฌ์ง๊ณผ ๊ฐ์ด '๋ฐ์ดํฐ'์ 'ํฌ์ธํฐ'๋ก ๊ตฌ์ฑ๋์ด์๋ค.
- ๋ค์ ๋ ธ๋๋ฅผ ์ฐธ์กฐํ๋ ์ฃผ์ ์ค ํ๋๊ฐ ์๋ชป๋๋ ๊ฒฝ์ฐ, ์ฒด์ธ์ด ๋์ด์ง ๊ฒ์ฒ๋ผ ๋ค์ชฝ์ ์๋ฃ๋ค๊ณผ ์ฐ๊ฒฐ์ด ๋๊ธฐ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์ ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ๋ ํ ์ ์์ ๊ฒ์ด๋ค.
- ๋ง์ง๋ง Node์ ๋งํฌ๋, Null๊ฐ์ ๊ฐ๋ฆฌํด
์ด๋ฅผ ๋ณด์ํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ๋ค์์ ์ค๋ช
ํ ์ด์ค (์๋ฐฉํฅ) ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ด๋ค.
Doubly Linked List
์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์์ฐจ์ ํ์์ด ํ์์ ์ธ ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋จ์ ์ ๋ณด์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ด๋ค.
- '๋ค์ ๋ฐ์ดํฐ์ ์ฃผ์ ๊ฐ' ๊ทธ๋ฆฌ๊ณ '์ด์ ๋ฐ์ดํฐ์ ์ฃผ์ ๊ฐ'์ ๊ฐ์ง๊ณ ์๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ด๋ค. ์ฆ, ๋ ธ๋ ์์ '๋ฐ์ดํฐ ๊ฐ'๊ณผ '์ด์ , ์ดํ ๋ฐ์ดํฐ์ ์ฃผ์ ๊ฐ'์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ค๋ฅด๊ฒ ์์ ์ด ์ํ๋ ๋ฐ์ดํฐ๊ฐ ์์ชฝ์ ๊ฐ๊น์ฐ๋ฉด 'head'๋ถํฐ, ๋ค์ชฝ์ ๊ฐ๊น์ฐ๋ฉด 'tail'๋ถํฐ ์ฐพ์๋ณด๋ฉด ๋์ฑ ๋นจ๋ฆฌ ์ฐพ์ ์ ์๋ค.
Circular Linked List
์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ๋ง์ง๋ง Node์ ๋งํฌ๊ฐ ๋ฆฌ์คํธ์ ์ฒ์ Node๋ฅผ ๊ฐ๋ฆฌํด
- ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ฒ์๊ณผ ๋์ ์ฐ๊ฒฐํ๋ฉด ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๋จ
์ฐธ๊ณ :
- ๊ฐ๋ฐ์ Miro๋์ ๋ธ๋ก๊ทธ : https://jud00.tistory.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%97%B0%EA%B2%B0-%EB%A6%AC%EC%8A%A4%ED%8A%B8Linked-List
- ์ ๋ณดํต์ ๊ธฐ์ ์ฉ์ดํด์ค : http://www.ktword.co.kr/test/view/view.php?m_temp1=3559
'Computer Science > Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ์ค๋ ๋ ์ด์ง ํธ๋ฆฌ (Threaded Binary Tree) (0) | 2022.04.26 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ (Tree) (0) | 2022.04.26 |
[์๋ฃ๊ตฌ์กฐ] ํ(Queue) (0) | 2022.03.10 |
[์๋ฃ๊ตฌ์กฐ] ์คํ(Stack) (0) | 2022.03.10 |
[์๋ฃ๊ตฌ์กฐ] ์ฌ๊ท(Recursion) (0) | 2022.03.10 |