๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์‹ค์Šต

์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์‹ค์Šต - [3] ๊ธฐ์ดˆ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ) (1)

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ๊ธฐ๋ณธ ์žฌ๋ฃŒ

๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ์žฌ๋ฃŒ๋กœ๋Š” ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋Š” ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ธฐ๋ณธ ์žฌ๋ฃŒ๋กœ ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์•Œ์•„๋‘์–ด์•ผ ํ•œ๋‹ค!


๋ฐฐ์—ด (array)

์ˆœ์ฐจ ๊ธฐ์–ต์žฅ์†Œ์— ํ• ๋‹น๋œ ์œ ํ•œ ๊ฐœ์ˆ˜์˜ ๋™์ผ ์ž๋ฃŒํ˜• ๋ฐ์ดํ„ฐ ์›์†Œ๋“ค

๋ฐฐ์—ด์€ 1์ฐจ์› ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ N์ฐจ์› ๋ฐฐ์—ด์ด ์กด์žฌํ•œ๋‹ค.

๋‹ค์ฐจ์› ๋ฐฐ์—ด

2์ฐจ์› ๋ฐฐ์—ด์€ pandas์˜ DataFrame๊ณผ ๊ฐ™์€ ๋ชจ์–‘์ด๋‹ค. ํ…Œ์ด๋ธ”(table)์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ 1์ฐจ์›๊ณผ 2์ฐจ์›์€ ๊ฐ๊ฐ ํ–‰(row)๊ณผ ์—ด(Column)๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค.

3์ฐจ์› ๋ฐฐ์—ด์€ 2์ฐจ์› ๋ฐฐ์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ ํ•ฉ์ณ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. (ex. 4๋ถ„๊ธฐ๋ณ„ ์„ธ ํ•™์ƒ์˜ 8๊ณผ๋ชฉ์—์„œ์˜ ์ ์ˆ˜)

4์ฐจ์› ๋ฐฐ์—ด์€ 3์ฐจ์› ๋ฐฐ์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ ํ•ฉ์ณ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. (ex. 3๋…„๊ฐ„ 4๋ถ„๊ธฐ๋ณ„ ์„ธ ํ•™์ƒ์˜ 8๊ณผ๋ชฉ์—์„œ์˜ ์ ์ˆ˜)

 


์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (Linked list)

๋™์ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ, ๋งํฌ์— ์˜ํ•ด ์—ฐ๊ฒฐ๋œ ์œ ํ•œ ๊ฐœ์ˆ˜์˜ ๋ฐ์ดํ„ฐ์›์†Œ์˜ ๋…ธ๋“œ๋“ค

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ข…๋ฅ˜
- ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(singly linked lists)
- ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(doubly linked lists)
- ์›ํ˜•์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(circularly linked lists)
- ํ—ค๋”๋ฐํŠธ๋ ˆ์ผ๋Ÿฌ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(linked lists with header and trailer)
- ์ด๋“ค์˜ ๋ณตํ•ฉ

๋ฐ์ดํ„ฐ ์›์†Œ์˜ ๋…ธ๋“œ๋ผ๊ณ  ํ‘œํ˜„๋˜์—ˆ๋Š”๋ฐ ๋…ธ๋“œ๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๋…ธ๋“œ(node): ํ•œ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์›์†Œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋™์ ๋ฉ”๋ชจ๋ฆฌ(dynamic memory)์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ

์ด๋ฉฐ, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋…ธ๋“œ์˜ ๊ตฌ์„ฑ์ด ์•ฝ๊ฐ„์”ฉ ๋‹ฌ๋ผ์ง„๋‹ค.

 

๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…ธ๋“œ

๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ž€ ์—ฐ์†๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ, ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์—ฐ๊ฒฐ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค. ๋…ธ๋“œ๋Š” ์œ„์™€ ๊ฐ™์ด ์›์†Œ์™€ ๋งํฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ณ , ์›์†Œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งํฌ๋Š” ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.  ์œ„์™€ ๊ฐ™์€ ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์—ฐ๊ฒฐ๋˜๋ฉฐ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌ์กฐ

๋‹ค์Œ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๋„๋งํฌ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์ ‘๊ทผ์ ์€ ์ฒซ ๋…ธ๋“œ ์ฆ‰, ํ—ค๋“œ๋…ธ๋“œ์˜ ์ฃผ์†Œ์ด๋‹ค.

 

์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ

์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ์ถ”๊ฐ€ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ญ๋ฐฉํ–ฅ ์ˆœํšŒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋…ธ๋“œ์˜ ๊ตฌ์„ฑ๋„ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์›์†Œ, ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋งํฌ, ์ถ”๊ฐ€๋กœ ์ด์ „ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋งํฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

์–‘๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ ‘๊ทผ์ ์€ ํ—ค๋“œ๋…ธ๋“œ(Head node)์˜ ์ฃผ์†Œ ๋˜๋Š” ํ…Œ์ผ๋…ธ๋“œ(Tail node)์˜ ์ฃผ์†Œ์ด๋‹ค.

์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌ์กฐ

 

์›ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์›ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ž€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ ํ—ค๋“œ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์ด๋‹ค.

์›ํ˜•์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…ธ๋“œ

๋…ธ๋“œ๋Š” ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์›ํ˜•์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌ์กฐ

 

ํ—ค๋”์™€ ํŠธ๋ ˆ์ผ๋Ÿฌ

ํ—ค๋”์™€ ํŠธ๋ ˆ์ผ๋Ÿฌ๋Š” ํ—ค๋“œ๋…ธ๋“œ ๋ฐ”๋กœ ์•ž์— ํ—ค๋” ํ˜น์€ ํ…Œ์ผ๋…ธ๋“œ ๋ฐ”๋กœ ๋’ค์— ํŠธ๋ ˆ์ผ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž‘์—… ํŽธ์˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ํ—ค๋”์™€ ํŠธ๋ ˆ์ผ๋Ÿฌ์—๋Š” dummy element๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ๋ณด๋ฉด ์™œ ์ž‘์—… ํŽธ์˜์„ฑ์ด ์ฆ์ง„๋˜๋Š”์ง€ ๊ฐ์ด ์ž˜ ์•ˆ์˜ค์ง€๋งŒ, ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ํ—ค๋”์™€ ํŠธ๋ ˆ์ผ๋Ÿฌ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ต‰์žฅํžˆ ํŽธ์•ˆํ•œ ๊ฒƒ์„ ๋А๋‚„ ์ˆ˜ ์žˆ๋‹ค.

ํ—ค๋”๊ฐ€ ์žˆ๋Š” ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์ด์™ธ์—๋„ ์—ฌ๋Ÿฌ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค.

์›ํ˜• ํ—ค๋” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(circular header linked lists)
์›ํ˜• ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (circular doubly linked lists)
ํ—ค๋” ๋ฐ ํŠธ๋ ˆ์ผ๋Ÿฌ ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ
ํ—ค๋” ๋ฐ ํŠธ๋ ˆ์ผ๋Ÿฌ ์›ํ˜• ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

 

728x90