์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ?
๋จผ์ , List๋ฅผ ์๊ฐํ๋ฉด ์ญ ~ ๋์ด๋์ด ์๋ ๊ฒ์ด ๋ ์ค๋ฅด์๋์?
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ง ๊ทธ๋๋ก ์ญ ~ ๋์ด๋์ด ์๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ฐ๊ฒฐํ๊ณ ์๋ ๊ฒ์ด์ฃ .
์ด? ์ญ ~ ๋์ด๋์ด์๊ณ ์ฐ๊ฒฐ๋์ด์๋ ๊ฒ์ '๋ฐฐ์ด' ์๋๊ฐ์?
๋ง์ต๋๋ค.
์๋ฃ๊ตฌ์กฐ์ ๊ธฐ๋ณธ์ด์ ๋ฐ์ดํฐ๊ฐ ์์ฐจ์ ์ผ๋ก ๋์ด๋์ด ์๋ ๊ฒ์ ๋ฐฐ์ด์ ๋๋ค.
๊ทธ๋ผ ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐฐ์ด(Array)๊ฐ ์๋๋ฐ ์ Linked List๋ฅผ ์ฌ์ฉํ๋์?
๋ฐฐ์ด๊ณผ Linked List์๋ ์์ฐํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
์์ ํฌ์คํ ์์ ๊ฐ ์๋ฃ๊ตฌ์กฐ๋ ํ์์ ๋ฐ๋ฅธ ์ฌ์ฉ์ฒ๊ฐ ์๊ณ , ์ฌ์ฉ์๊ฐ ์ ๋์ ์ผ๋ก ์ฌ์ฉํด์ผ ํจ์ ํํํ์ต๋๋ค.
๊ทธ๋์ ๋ฐฐ์ด์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ์ ๋ํด ์๊ณ Linked List๋ผ๋ ์๋ฃ๊ตฌ์กฐ์์ ์ฐจ์ด์ ์ ์์์ผํฉ๋๋ค.
์ฐจ์ด์ ์ ์ค๋ช ํ๊ธฐ ์์ ๋ฐฐ์ด์ ๋ํด ๋ฐ๋ก ์์ฑํ์ง ์๊ณ ๋ฐ๋ก Linked List ํฌ์คํธ๋ฅผ ์์ฑํ๋ ์ด์ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ณต๋ถํ๊ฒ๋๋ฉด ๋ฐฐ์ด์ ์ด๋ ์ ๋ ์ต์ํด์ ธ ์๋ค๊ณ ์๊ฐํด์ ๊ทธ๋ ์ต๋๋ค.
์ ๋ธ๋ก๊ทธ JAVA ์ธ์ด์ ๋ํ ํฌ์คํธ( ์๋ฐ ๋ฐฐ์ด1, ์๋ฐ ๋ฐฐ์ด2 ) ์ค ์๋ ์ค๋ช ์ด ์์ฑ๋์ด ์๊ณ ์.
๋ฐฐ์ด์ ์๋ก ์์ฐจ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์์ง๋ง ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์์ฐจ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ง๋ง ์์ฐจ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์์ง ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ค์ด ํ๋์ ๋ฌถ์ [.............]์ผ๋ก ๋ฌถ์ฌ์์ง๋ง ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ๊ฐ ์๋ก ํฉ์ด์ ธ ์์ต๋๋ค.
์ผ์์ํ ์์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ ธ๋๋ฐฉ -> PC๋ฐฉ -> ์ํ๊ด์ ๊ฐ๊ธฐ๋ก ํ์ต๋๋ค.
์ด๋ ํ ์ฅ์์ {๋ ธ๋๋ฐฉ, PC๋ฐฉ, ์ํ๊ด}์ด ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ํด๋น ์ฅ์์์ ํ๊ณ ์ถ์๊ฑธ ๋ฐ๋ก ์ฆ๊ธธ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ ธ๋๋ฐฉ์ ๊ฐ๋ค๊ฐ ๊ฐ์๊ธฐ ๋ณผ๋ง์ฅ์ ๊ฐ๊ณ ์ถ์๋ฐ ํด๋น ์ฅ์์๋ ๋ณผ๋ง์ฅ์ด ์์ต๋๋ค.
๋ณผ๋ง์ฅ์ ์ด์ฉํ๋ ค๋ฉด ์ด ์ฅ์์ ๋ณผ๋ง์ฅ์ ์์ ์๋ก ์ค์นํด์ผํ๋๋ฐ ๊ณต๊ฐ์ด ๋ถ์กฑํฉ๋๋ค.
์ ์ฒด ๊ฑด๋ฌผ์ ํ์ฅํ๊ณ ๋ณผ๋ง์ฅ์ ์ถ๊ฐํด์ผํ์ฃ .
๊ทธ๋ฐ๋ฐ ํ ์ฅ์์๋ง ๋จธ๋ฌผ๋ฌ ์์ง ์๊ณ ๋์ ์ ๋ฏธ๋ฆฌ ์ง๋์์ต๋๋ค.
A ๋ ธ๋๋ฐฉ -> B PC๋ฐฉ -> C ์ํ๊ด
์ฐ๋ฆฌ๋ A ๋ ธ๋๋ฐฉ์ ๊ฐ๋ค๊ฐ ๊ฐ์๊ธฐ D ๋ณผ๋ง์ฅ์ ๊ฐ๊ณ ์ถ์ด์ก์ต๋๋ค.
๊ทธ๋ผ ๋ ธ๋๋ฐฉ์์ ๋ ธ๋๋ฅผ ๋ถ๋ฅด๋ ์ค์ด๋ ๋ง์น๊ณ D ๋ณผ๋ง์ฅ์ ๋์ ์ ์ถ๊ฐํด์ ์ด๋ํ ์ ์์ต๋๋ค.
์๊ฐ ๋ฐฐ์ด์ ๊ฐ๋ ์ด๊ณ ์๋๊ฐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฐ๋ ์ ๋๋ค. ๊ฐ์ ์ฅ์์๋ ์์ง๋ง ๋์ ์ ์ถ๊ฐํด์ ์ด๋ํ ์ ์์ฃ .
์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ํ๋์ ๋ฌถ์์ด ์๋๋ผ ๋ฐฉํฅ์ด๋ผ์ ์ธ์ ๋ ์ง ๋ฐฉํฅ์ ์์ ํ ์ ์์ต๋๋ค.
{0, 1, 2, 3, 4, 5} ์ด๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
ํ์ (Search), 5 ์ฐพ๊ธฐ
์ฐ๋ฆฌ๋ ๋ฐฐ์ด์์ ์์์์น(0)๋ถํฐ ๋ง์ง๋ง ์์น(5)๊น์ง ์ ์ ์์ต๋๋ค. (Index)
์์ ์์น๋ถํฐ ๋ง์ง๋ง ์์น๊น์ง for๋ฌธ์ ํตํด ์ํ๋ ๊ฐ์ ์ฐพ์ ์ ์๊ฒ ์ฃ ?
5๋ฅผ ์ฐพ๋๋ค๊ณ ํ๋ฉด ๋๊น์ง ํ์ํด์ผํ๋ฏ๋ก ์ด๊ฒ์ ์ต์ ์ ๊ฒฝ์ฐ(Big-O), O(N)์ด๋ผ๊ณ ํ์ฃ .
์ฐ๊ฒฐ ๋ฆฌ์คํธ์์๋ ํ์ฌ ์์น(์ฃผ์)๋ง ์๊ณ ์์ต๋๋ค. (Iterator)
์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ Iterator๊ฐ 0์ ๊ฐ๋ฅดํค๋์ง, 3์ ๊ฐ๋ฅดํค๋์ง ๋ง์ง๋ง์ ์ํํ๋ ์ฐ์ฐ์ ํตํด ์ ์ ์์ต๋๋ค.
๋ง์ฝ, Iterator๊ฐ 5์ ์ฃผ์๋ฅผ ๊ฐ๋ฅดํค๊ณ ์๋ค๋ฉด ฮฉ (1), 0์ ์ฃผ์๋ฅผ ๊ฐ๋ฅดํค๊ณ ์๋ค๋ฉด O(N)
์ฆ, ๋จ์ํ ํ์ ๋ฉด์์๋ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
์ ๊ทผ (Access), 6๋ฒ ์งธ ๋ฐ์ดํฐ ์ ๊ทผ
์ฐ๋ฆฌ๋ ๋ฐฐ์ด์์ ์์์์น๋ถํฐ ๋ง์ง๋ง ์์น๊น์ง ์ ์ ์์ต๋๋ค. (Index)
๋ฐฐ์ด์์ 5๋ผ๋ ๊ฐ์ ์ฐพ์ ๋ ์ฐ๋ฆฌ๋ ์ธ๋ฑ์ฑ(array[5])์ ํตํด O(1) ๋ง์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ์์๋ Index ๊ฐ๋ ์ด ์์ด์ ๋ฐ์ดํฐ์ ์ ๊ทผ์ ํ๊ณ ์ถ์ด๋.. ๋ฐ๋ก ํ ์๋ ์์ต๋๋ค.
ํ์ฌ ์์น๋ง ๊ฐ์ง๊ณ ์์ผ๋๊น์.
๋ง์ฝ์ ํ์ฌ ์์น๊ฐ '5'๋ฅผ ๊ฐ๋ฅดํค๊ณ ์๊ณ ์ ๊ทผํ๋ค๋ฉด ฮฉ(1),
ํ์ฌ ์์น๊ฐ '0'์ ๊ฐ๋ฅดํค๊ณ ์๋ค๋ฉด 5๊น์ง ํ์์ ์งํํ ํ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ฆ, ์ต์ ์ ๊ฒฝ์ฐ ํ์ ์๊ฐ์ด ๋ฐ์ํฉ๋๋ค. O(N)
์ ๊ทผ์ Array๊ฐ ๋ ํจ์จ์ ์ ๋๋ค.
์ด์ ๋ถํฐ Linked List์ ์ฅ์ ์ด ๋์ต๋๋ค.
์ฝ์ (Insertion), 6 ์ฝ์
Array์์ ๋งจ ๋ค์ ๊ฐ์ ์ฝ์ ํ๋ค๊ณ ํด๋ณด์ฃ .
๊ธฐ๋ณธ์ ์ผ๋ก๋ out of range ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ ์ ๋๋ค.
์ฐ๋ฆฌ๋ ๋ฐฐ์ด์ ์ ์ธํ ๋, ํฌ๊ธฐ๋ฅผ ์ ํ๊ณ ๋ฐฐ์ด์ ํ ๋นํ์ฃ ?
array[6] = {0, 1, 2, 3, 4, 5}์ ๊ฐ์ด ๋ง์ด์ฃ .
array์ ๋งฅ์๋ฉ ํฌ๊ธฐ๊ฐ 6์ผ๋ก ํ ๋น๋์ด์ array[6]์ ์ ๊ทผ ํ ์๊ฐ ์์ต๋๋ค.
์ ๊ทผ์ ํ๋๋ผ๋ out of range๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด์ฃ .
- ํด๊ฒฐ์ฑ
์ฒ์๋ถํฐ array[100]๊ณผ ๊ฐ์ด ์ ์ธํ๋ค๋ฉด ๊ณต๊ฐ์ด ์ถฉ๋ถํ๋ฏ๋ก ๋ฌธ์ ๋ ์์ต๋๋ค.
ํ์ง๋ง, ๊ณต๊ฐ์ ๋ญ๋นํ๊ฒ ๋๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ 100์ ์ด๊ณผํ๋ค๋ฉด ?
๋ฐฐ์ด ํฌ๊ธฐ ์ฌํ ๋น
๋ฐฐ์ด์ ํฌ๊ธฐ < ์ ๊ทผํ๋ ค๋ ์ธ๋ฑ์ค ๋ผ๋ฉด, ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ฌํ ๋นํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
ํ์ง๋ง ์ฌํ ๋น์ ํ๊ฒ ๋๋ฉด ์ด์ ์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํด๋๊ณ ๋ค์ ์ ๋ฌํด์ผํฉ๋๋ค.
์๊ฐ์ ๋งค์ฐ ๋ญ๋นํ๋ ํ์์ฃ . O(2N) ์ ๋ ๋๊ฒ ๋ค์.
์ฒ์๊ณผ ์ค๊ฐ์ ์ฝ์ ํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
array[0]์ ๊ฐ์ ๋ฃ์๋ค๋ฉด ์ดํ์ ์๋ ๊ฐ์ ๋ค ํ์นธ์ฉ ๋ค๋ก ๋๊ฒจ์ฃผ์ด์ผ ํฉ๋๋ค.
array[5] -> array[6], array[4] -> array[5] , ... , array[0] -> array[1], array[0] = 0
์ฆ, O(N)์ด์ฃ .
์ด๋ฒ์ Linked List์์ ๋งจ ๋ค์ ๊ฐ์ ์ฝ์ ํ๋ค๊ณ ํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ , ํ์ฌ ์์น(Iterator)๋ง ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋งจ ๋ค๊น์ง ํ์์ ํด์ผํฉ๋๋ค...
๊ทธ๋ฐ ๋ค์ ์ฝ์ ์ ํด์ผ์ฃ . O(N)์ ๋๋ค.
์ด ๋ ๊น์ง๋ง ๋ณด๋ฉด, ๋ฐฐ์ด๋ณด๋ค ์ข์๊ฒ ํ๋๋ ์์ฃ ..?
ํ์ง๋ง ํ์ฌ ์์น ๋ค์ ๊ฐ์ ์ฝ์ ํ๋ค๋ฉด O(1)์ ๋๋ค.
ํ์ฌ ์์น์ ๊ฐ์ 4์ด๊ณ , ๋ค์ ์์น์ ๊ฐ์ 5์ ๋๋ค.
์ฐ๋ฆฌ๋ 6์ ๋ค์ ์์น๋ฅผ 5๋ก ์ค์ ํ๊ณ 4์ ๋ค์ ์์น๋ฅผ 5๋ก ์ค์ ํ ์ ์์ต๋๋ค.
์ด ๋ ์๊ฐ์ O(1)์ด ๋๋๊ฑฐ์ฃ .
์ ๋ฐฉ์์ ์ฑํํ๋ฉด ์ฐ๊ฒฐ๋ฆฌ์คํธ์์๋ ํ์ฌ ์์น ๋ค์์ ๊ฐ์ ์ฝ์ ํ๋ค๋ฉด ์ฒ์, ์ค๊ฐ, ๋ง์ง๋ง ์ด๋ ๊ณณ์ ๊ฐ์ ์ฝ์ ํ๋ O(1)์ด ๋ฉ๋๋ค.
์ญ์ (Deletion), 5 ์ญ์
์ฝ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๋ฐฐ์ด์ ํ๋์ ๊ฐ์ ์ญ์ ํ๊ฒ ๋๋ฉด ๋น์ด์๋ ๊ณณ์ ํ๋์ฉ ์๋น๊ฒจ์ค์ผํ๋ฏ๋ก O(N)์ด ๋ฉ๋๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๊ฐ๋ฅดํค๋ ๋ฐฉํฅ๋ง 4 -> 5 -> 6 ์์ 4 -> 6 ์ด ๋๋๋ก ์์ ํด์ฃผ๋ฉด ๋์ฃ .
์ฆ O(1)์ด ๋ ์ ์์ต๋๋ค.
์ฌ์ฉ ์ฉ๋์ ์ฐจ์ด์ ์ ๋ฆฌ
๋ฐฐ์ด | ์ฐ๊ฒฐ ๋ฆฌ์คํธ | |
๋ณ๊ฒฝ | O(1) | ฮฉ (1), O(N) |
์ ๊ทผ | O(1) | ฮฉ (1), O(N) |
ํ์ | ฮฉ (1), O(N) | ฮฉ (1), O(N) |
์ฝ์ | O(N) | ฮฉ (1) |
์ญ์ | O(N) | ฮฉ (1) |
๋ฐฐ์ด : ํ ํ๋ฆฟ ๋ง๋ฅ ์ด๊ธฐ ํํ๊ฐ ๊ฐ์ถ์ด์ ธ์๊ณ ๊ทธ ์์ ๊ฐ ๋ณ๊ฒฝ๋ง ๋ฐ์ํ๋ ๊ฒฝ์ฐ ( ์ฑ์ )
์ฐ๊ฒฐ ๋ฆฌ์คํธ : ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋น๋ฒํ๊ฒ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ( ์๋ํฐ )
ํฌ์คํธ ๋ฐ ๋๊ธ์ ์์ฑํ ๋, ๊ธ์๊ฐ ์์ฑ๋๊ณ ์ค๊ฐ ๊ธ์๋ฅผ ์ง์ฐ๋ ํ์
'์๊ณ ๋ฆฌ์ฆ > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
6. STL ์ฌ์ฉํ๊ธฐ - std::list (0) | 2024.02.11 |
---|---|
5. ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Circular Linked List) (1) | 2024.02.10 |
4. STL ๋ฐ๋ผ์ก๊ธฐ - ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Doubly Linked List) ๊ตฌํ (0) | 2024.02.07 |
3. STL ๋ฐ๋ผ์ก๊ธฐ - ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Singly Linked List) ๊ตฌํ (0) | 2024.02.04 |
1. ์๋ฃ๊ตฌ์กฐ๋? (2) | 2024.01.26 |