๐Ÿ“š Study/Data Structures

[์ž๋ฃŒ๊ตฌ์กฐ] ๊ธฐ์ดˆ๋ฐ์ดํ„ฐ๊ตฌ์กฐ | ๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์œฐ๊ฐฑ 2022. 9. 11. 17:01


โœ… 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 ๊ทธ์™ธ์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

 

(์ถ”ํ›„ ์ถ”๊ฐ€์˜ˆ์ •)


๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ ์„ธ์ข…๋Œ€ํ•™๊ต ์ž๋ฃŒ๊ตฌ์กฐ ์ˆ˜์—…๊ต์žฌ '์•Œ๊ณ ๋ฆฌ์ฆ˜ ์›๋ฆฌ์™€ ์‘์šฉ'(๊ตญํ˜•์ค€ ์ง€์Œ)์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.