[์๋ฃ๊ตฌ์กฐ] ๊ธฐ์ด๋ฐ์ดํฐ๊ตฌ์กฐ | ๋ฐฐ์ด, ์ฐ๊ฒฐ๋ฆฌ์คํธ
โ 3.1 ๋ฐ์ดํฐ๊ตฌ์กฐ์ ๊ธฐ๋ณธ ์ฌ๋ฃ
๊ฑด๋ฌผ์ ๋น์ ํ๋ฉด
๋ฐ์ดํฐ๊ตฌ์กฐ: ๊ฑด๋ฌผ์ ๊ตฌ์ฑํ๋ ์ฌ๋ฃ, ์์ฌ, ์ด๋ค์ด ์ํธ ๊ฒฐํฉ๋ ๊ตฌ์กฐ๋ฌผ
์๊ณ ๋ฆฌ์ฆ: ๊ฑด๋ฌผ์ ์กฐ๋ช ํ๊ณ , ๋๋๋ฐฉ์ ๊ณต๊ธํ๊ฑฐ๋, ํ๊ธฐ์ํค๋ฉฐ, ๋น์์ ์๋ํ๋ ์๋ ๊ฐํ ์์คํ ๋ฑ ๊ฑด๋ฌผ์ ์ด์ํ๋ ์ผ๋ จ์ ์ ์ด ์์คํ
์ ์ค๊ณ๋ ์กฐ๋ช ๋ฐฐ์น๋ ๋๋๋ฐฉ ๋ฐฐ๊ด ๊ตฌ์กฐ๊ฐ (๋ฐ์ดํฐ๊ตฌ์กฐ)
๊ฑด๋ฌผ์ ์กฐ๋ช ๊ณผ ๋๋๋ฐฉ์ ์ด์ฉ ํจ์จ๊ณผ ๊ฒฝ์ ์ฑ ๋ฉด์์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ฒ๋ผ (์๊ณ ๋ฆฌ์ฆ)
์ข์ ๋ฐ์ดํฐ๊ตฌ์กฐ ์ค๊ณ๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ด์ฉ์ ์ ๊ฒฐ ์กฐ๊ฑด์ด๋ค!
๋ฐ์ดํฐ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ๋ ๊ธฐ๋ณธ ์ฌ๋ฃ๋ก์ ๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ณต๋ถํ๊ธฐ
๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ์ฐจํ ํ ์ฐจ์ ๋์ ํํ์ ๋ฐ์ดํฐ๊ตฌ์กฐ ์ค๊ณ์ ๊ธฐ๋ณธ ์ฌ๋ฃ ์ญํ ์ ํ๋ค :)
์ฐจํ์ ํ์ตํ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ค์ ์ด ์ฅ์์ ์ต๋ํ ๋ฐฐ์ด์ด๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ํด ์์ธ ๊ตฌํ๋จ
์ด์ด์ง๋ ์ฅ์์ ๋ค๋ฃฐ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ค์ด ๋น๊ต์ ์ถ์์ ์ด๊ณ ์ธ๊ฐ์ ์ฌ๊ณ ์ ๋ ๊ฐ๊น๋ค๊ณ ํ๋ค๋ฉด,
๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๊ตฌ์ฒด์ ์ด๊ณ ์ปดํจํฐ๊ตฌ์กฐ์ ๋ ๊ฐ๊น์
โ 3.2 ๋ฐฐ์ด
๐ 3.2.1 1์ฐจ์ ๋ฐฐ์ด
๋ฐฐ์ด(array): ์์ฐจ ๊ธฐ์ต์ฅ์์ ํ ๋น๋ ์ ํ ๊ฐ์์ ๋์ผ ์๋ฃํ ๋ฐ์ดํฐ์์
๐ 3.2.2 ๋ค์ฐจ์ ๋ฐฐ์ด
โฐ 2์ฐจ์ ๋ฐฐ์ด
โฐ 3์ฐจ์ ๋ฐฐ์ด
โฐ 4์ฐจ์ ๋ฐฐ์ด
โ 3.3 ์ฐ๊ฒฐ๋ฆฌ์คํธ
์ฐ๊ฒฐ๋ฆฌ์คํธ(linked list): ๋์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋, ๋งํฌ์ ์ํด ์ฐ๊ฒฐ๋ ์ ํ ๊ฐ์์ ๋ฐ์ดํฐ์์ ๋ ธ๋๋ค
์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ดํดํ๊ธฐ ์ํด ์ฐ์ ๋์ ๋ฉ๋ชจ๋ฆฌ์ ๋ ธ๋์ ๊ฐ๋ ์ ์์์ผ ํจ.
๋์ ๋ฉ๋ชจ๋ฆฌ(dynamic memory): ํ๋ก๊ทธ๋จ ์คํ ์์ ํ๋ก๊ทธ๋จ์ ์ํด ์ฌ์ฉ๊ฐ๋ฅํ ์ฃผ๋ฉ๋ชจ๋ฆฌ์ ํ ๊ตฌ์ญ
๋ ธ๋(node): ํ ๊ฐ์ ๋ฐ์ดํฐ์์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ
๋ ธ๋๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น(allocation)๊ณผ ํด์ (deallocation)๋ ์คํ์๊ฐ์ ์์คํ ์ฝ์ ์ํด ์ฒ๋ฆฌ๋จ
- getnode(): ๋ ธ๋๋ฅผ ํ ๋นํ๊ณ , ๊ทธ ๋ ธ๋์ ์ฃผ์๋ฅผ ๋ฐํ. ๋ง์ฝ ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ ๊ฐ๋ ์์ ์ด๋ฉด ๋(null) ๋ฐํ
- putnode(): ์ฃผ์ i์ ๋ ธ๋์ ํ ๋น๋์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ์ ํด์ ํ๊ณ , ์ด๋ฅผ ๋์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐํ(๋ฉ๋ชจ๋ฆฌ ์ฌํ์ฉ์ ์ํจ)
์ปดํ์ผ ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ,
์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋ ธ๋๋ค์ ์ํ ๋ฉ๋ชจ๋ฆฌ๋ ๋์ ํ ๋น, ์ฆ ํ๋ก๊ทธ๋จ ์คํ ์ ํ ๋น๋จ์ ์ ์ํ๊ธฐ
๐ 3.3.1 ๋จ์ผ์ฐ๊ฒฐ๋ฆฌ์คํธ
๋จ์ผ์ฐ๊ฒฐ๋ฆฌ์คํธ(singly linked list): ์ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฅ ๋จ์ํ ์ฐ๊ฒฐ ๋ฐ์ดํฐ๊ตฌ์กฐ
- ์์(element): ๋ฐ์ดํฐ์์
- ๋งํฌ(link): ๋ค์ ๋ ธ๋์ ์ฃผ์. ๋ค์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ๋๋งํฌ ์ ์ฅ
๋จ์ผ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ ๊ทผ์ , ์ฆ ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ ์ฒด์ ๋ํ ์ฐธ์กฐ๋ ์ฒซ ๋ ธ๋์ ์ฃผ์๋ฅผ ์ฌ์ฉํจ
์ด๋ฅผ ํค๋๋ ธ๋(head node)๋ผ๊ณ ํจ
์ ์ฌ์ง์ ๋จ์ผ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋ํ ์ ๊ทผ์ : ํค๋๋ ธ๋์ ์ฃผ์ L
์๋๋ถ๋ถ์ ๋จ์ผ์ฐ๊ฒฐ๋ฆฌ์คํธ L์ด ์ด๊ธฐํ๋๊ฑฐ๋ ๋น์ด์๋ ์ํ๋ฅผ ๋ณด์ธ๋ค. ์ฆ, ๋น์ด์๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ํค๋๋ ธ๋ ์ฃผ์๋ ๋์ด๋ค.
๐ 3.3.2 ์ด์ค์ฐ๊ฒฐ๋ฆฌ์คํธ
์ด์ค์ฐ๊ฒฐ๋ฆฌ์คํธ(doubly linked list): ๊ฐ ๋ ธ๋์ ๋งํฌ๋ฅผ ํ๋ ๋ ์ถ๊ฐํ์ฌ
์ญ๋ฐฉํฅ ์ํ๋ ๊ฐ๋ฅํ๋๋ก ๊ตฌํํ ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ์์(element): ๋ฐ์ดํฐ์์
- ๋งํฌ(link): ๋ค์ ๋ ธ๋์ ์ฃผ์. ๋ค์ ์ฃผ์๊ฐ ์์ผ๋ฉด ๋๋งํฌ ์ ์ฅ.
- ๋งํฌ(link): ์ด์ ๋ ธ๋์ ์ฃผ์. ์ด์ ์ฃผ์๊ฐ ์์ผ๋ฉด ๋๋งํฌ ์ ์ฅ.
์ด์ค์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ ๊ทผ์ , ํค๋๋ ธ๋(head node)์ ์ฃผ์ or ํ ์ผ๋ ธ๋(tail node)์ ์ฃผ์๋ฅผ ์ฌ์ฉ
์ด๋ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง์ง ์๋ ํน๋ณ๋ ธ๋
์ ์ฌ์ง์์ ์ด์ค์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋ํ ์ ๊ทผ์ ์ ํค๋๋ ธ๋์ ์ฃผ์ Head or ํ ์ผ๋ ธ๋์ ์ฃผ์ Tail์ด๋ค.
์๋๋ถ๋ถ์ ๋ณด์ธ ๊ฒ์ฒ๋ผ ์ด์ค์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ์ด๊ธฐํ๋๊ฑฐ๋ ๋น์ด ์์ผ๋ฉด Head์ Tail๊ฐ์ ๋ชจ๋ ๋์ด๋ค.
๐ 3.3.3 ์ํ์ฐ๊ฒฐ๋ฆฌ์คํธ
๐ 3.3.4 ํค๋์ ํธ๋ ์ผ๋ฌ
๐ 3.3.5 ๊ทธ์ธ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ
(์ถํ ์ถ๊ฐ์์ )
๋ณธ ๊ฒ์๋ฌผ์ ์ธ์ข ๋ํ๊ต ์๋ฃ๊ตฌ์กฐ ์์ ๊ต์ฌ '์๊ณ ๋ฆฌ์ฆ ์๋ฆฌ์ ์์ฉ'(๊ตญํ์ค ์ง์)์ ์ ๋ฆฌํ์์ต๋๋ค.