์ž๋ฃŒ๊ตฌ์กฐ

[์ž๋ฃŒ๊ตฌ์กฐ] ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ

soowitty 2023. 11. 11. 15:14

๐Ÿ’ก ๋ณธ ๊ธ€์€ ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ ๋„์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

5.1 ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ

5.2.1 ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

intro

  • ์„ ํ˜• = linear = ์ „ํ›„ 1:1 ์—ฐ๊ฒฐ ํ˜•ํƒœ
  • ๋น„์„ ํ˜• = nonlinear = ์ „ํ›„ ๅคš:ๅคš ์—ฐ๊ฒฐ ํ˜•ํƒœ

๐Ÿ“Œ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ์š”์†Œ๊ฐ€ ์ผ๋ ฌ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
ํ•˜๋‚˜์˜ ์ž๋ฃŒ ๋’ค์— ํ•˜๋‚˜์˜ ์ž๋ฃŒ๊ฐ€ ์กด์žฌํ•œ๋‹ค. (๋น„์„ ํ˜•์€ ํ•˜๋‚˜์˜ ์ž๋ฃŒ ๋’ค์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž๋ฃŒ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ)

์„ ํ˜• ๊ตฌ์กฐ์˜ ๋ฆฌ์ŠคํŠธ๋Š” ์„ ํ˜• ๋ฆฌ์ŠคํŠธ(linear list)์™€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(linked list)๋กœ ๋‚˜๋‰œ๋‹ค.

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ - Linked List

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์‹ผ ๋…ธ๋“œ๋ฅผ ํฌ์ธํ„ฐ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ๊ณต๊ฐ„์ ์ธ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”์‹œํ‚จ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

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

์ด๋•Œ, ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋Š” ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

prev ํฌ์ธํ„ฐ์™€ next ํฌ์ธํ„ฐ๋กœ ์•ž๊ณผ ๋’ค์˜ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.

image

  • ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ head, ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ tail์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰์—๋Š” ๋ถˆ๋ฆฌํ•˜๋‚˜, ์‚ฝ์ž… · ์‚ญ์ œ์—๋Š” ์šฉ์ดํ•˜๋‹ค.
  • Tree ๊ตฌ์กฐ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, Tree์—์„œ ์‚ฌ์šฉ๋˜์—ˆ์„ ๋•Œ ๊ทธ ์œ ์šฉ์„ฑ์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค.

 

์ข…๋ฅ˜

1) ์‹ฑ๊ธ€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ - Singly Linked List (=๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)

  • ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ(next ํฌ์ธํ„ฐ)๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

2) ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ - Doubly Linked List

image

  • ๋‹ค์Œ ๋…ธ๋“œ(next ํฌ์ธํ„ฐ), ์ด์ „ ๋…ธ๋“œ(prev ํฌ์ธํ„ฐ)์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์ „ · ํ›„๋กœ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ n๋ฒˆ์˜ ํƒ์ƒ‰์„ ํ•ด์•ผํ•œ๋‹ค. ๋ฐ˜๋ฉด ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ์–ป๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๊ฐ€ tail์— ๊ฐ€๊นŒ์šฐ๋ฉด tail์—์„œ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ํƒ์ƒ‰ ์‹œ๊ฐ„ ์ ˆ์•ฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

image

3) ์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ - Circular Linked List

  • ์‹ฑ๊ธ€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์ง€๋งŒ, ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ next ํฌ์ธํ„ฐ๊ฐ€ null์ด ์•„๋‹Œ head ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    image

4) ์›ํ˜• ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ - Doubly Circular Linked List

  • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์ง€๋งŒ, ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ next ํฌ์ธํ„ฐ๊ฐ€ null์ด ์•„๋‹Œ head ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์‚ฝ์ž… · ์‚ญ์ œ : O(1)
    • ์ฒ˜์Œ์— ์‚ฝ์ž… · ์‚ญ์ œ : O(1)
    • ์ค‘๊ฐ„์— ์‚ฝ์ž… · ์‚ญ์ œ : O(n)
    • ๋์— ์‚ฝ์ž… · ์‚ญ์ œ
      • ๋์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ„๋„์˜ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ–๋Š” ๊ฒฝ์šฐ : O(1)
      • ๋์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ„๋„์˜ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ–์ง€ ์•Š๋Š” ๊ฒฝ์šฐ : O(n) ← ํƒ์ƒ‰ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ธฐ ๋•Œ๋ฌธ
  • ํƒ์ƒ‰ : O(n)

์‚ฝ์ž…, ์‚ญ์ œ๋Š” ์šฉ์ดํ•˜์ง€๋งŒ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.

 

5.2.2 ๋ฐฐ์—ด

๋ฐฐ์—ด

โœ๏ธ ๋™์ ๋ฐฐ์—ด๋„ ์žˆ์ง€๋งŒ ์ •์ ๋ฐฐ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค.

  • ๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋‚˜์—ดํ•œ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
  • ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„๋†“์Œ
  • ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์Œ (์„ ์–ธํ•  ๋•Œ ํฌ๊ธฐ๋ฅผ ์ •ํ•˜๋ฉด, ๊ทธ ํฌ๊ธฐ๋กœ ๊ณ ์ •๋œ๋‹ค.)
  • ์ค‘๋ณต ํ—ˆ์šฉ, ์ˆœ์„œ๊ฐ€ ์žˆ๋‹ค.

 

๋žœ๋ค ์ ‘๊ทผ๊ณผ ์ˆœ์ฐจ์  ์ ‘๊ทผ

์ˆœ์ฐจ ์ ‘๊ทผ - Sequential Access

ํŠน์ • ๋ฐ์ดํ„ฐ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋กœ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ทธ ์‚ฌ์ด์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฑฐ์ณ์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

๋žœ๋ค ์ ‘๊ทผ - Random Access (=๋น„์ˆœ์ฐจ ์ ‘๊ทผ)

์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

image

 

๋ฐฐ์—ด vs. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

๋ฐฐ์—ด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
ํฌ๊ธฐ ๊ณ ์ • → ์ง€์ •๋œ ํฌ๊ธฐ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ถˆ๊ฐ€๋Šฅ ํฌ๊ธฐ์˜ ์ œํ•œ์ด ์—†์Œ → ์‚ฝ์ž…·์‚ญ์ œ ์ž์œ ๋กœ์›€
์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ• ๋‹น ๋ฐ›์Œ ์—ฐ์†๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ํ• ๋‹น ๋ฐ›์Œ
random access ๊ฐ€๋Šฅ random access ๋ถˆ๊ฐ€๋Šฅ
ํƒ์ƒ‰ ๋น ๋ฆ„ O(1) ํƒ์ƒ‰ ๋Š๋ฆผ O(n)
์‚ฝ์ž… · ์‚ญ์ œ ๋Š๋ฆผ ์‚ฝ์ž… · ์‚ญ์ œ ๋น ๋ฆ„
index ์กด์žฌ node ์กด์žฌ

 

ํ™œ์šฉ ์‚ฌ๋ก€

  • ๋ฐฐ์—ด
    • ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ (๋ฐ”๊ตฌ๋‹ˆ ์—ญํ• )
    • ๋ถˆ๊ทœ์น™์ ์ธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ์ดํ›„์— ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ํ•  ๋•Œ ํ™œ์šฉ
  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ
    • ์Œ์•… ์ŠคํŠธ๋ฆฌ๋ฐ ์–ดํ”Œ์—์„œ ์ด์ „๊ณก-๋‹ค์Œ๊ณก์„ ์—ฐ๊ฒฐํ•  ๋•Œ ๋งŽ์ด ํ™œ์šฉ
    • ํฌํ† ์ƒต์˜ history ๊ธฐ๋Šฅ
      • history ๋‚ด์—ญ์ด ์Œ“์—ฌ์„œ ํŠน์ • ์ž‘์—… ์‹œ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ฑฐ๋‚˜ ๋‹ค์‹œ ์ตœ๊ทผ์œผ๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

5.2.3 ๋ฒกํ„ฐ

๋™์ ์œผ๋กœ ์š”์†Œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋™์  ๋ฐฐ์—ด์ด๋‹ค. ์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฐœ์ˆ˜๋ฅผ ๋ชจ๋ฅธ๋‹ค๋ฉด ๋ฒกํ„ฐ๋ฅผ ์จ์•ผ ํ•œ๋‹ค.

  • ์ค‘๋ณต ํ—ˆ์šฉ
  • ์ˆœ์„œ๊ฐ€ ์žˆ์Œ
  • ๋žœ๋ค ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ํƒ์ƒ‰ or ๋งจ ๋’ค์˜ ์š”์†Œ๋ฅผ ์‚ญ์ œ·์‚ฝ์ž… : O(1)
  • ๋งจ ๋’ค๋‚˜ ๋งจ ์•ž์ด ์•„๋‹Œ ์š”์†Œ๋ฅผ ์‚ญ์ œ·์‚ฝ์ž… : O(n)

 

5.2.4 ์Šคํƒ

์Šคํƒ

์Šคํƒ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

image

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋Š” ์„ ์ž…ํ›„์ถœ ๊ตฌ์กฐ์ด๋‹ค. (LIFO, Last In First Out)

  • push : ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€
  • pop : ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ

ํ™œ์šฉ ๋ถ„์•ผ

  • ์žฌ๊ท€์ ์ธ ํ•จ์ˆ˜๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉ๋จ
  • ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐฉ๋ฌธ ๊ธฐ๋ก

์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์‚ฝ์ž… · ์‚ญ์ œ : O(1)
  • ํƒ์ƒ‰ : O(n)

 

5.2.5 ํ

ํ

image

 

ํ๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋Š” ์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ์ด๋‹ค. (FIFO, First In First Out)

  • enqueue : ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์Œ
  • dequeue : ํ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋ƒ„
  • front : ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ์ชฝ
  • rear : ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ์ชฝ

ํ™œ์šฉ ๋ถ„์•ผ

  • CPU ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค
  • ์Šค๋ ˆ๋“œ ํ–‰๋ ฌ or ๋„คํŠธ์›Œํฌ ์ ‘์†์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ–‰๋ ฌ
  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)
  • ์บ์‹œ์‹œ๊ฐ„ ๋ณต์žก๋„
  • ์‚ฝ์ž… · ์‚ญ์ œ : O(1)
  • ํƒ์ƒ‰ : O(n)

'์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฃŒ๊ตฌ์กฐ] ๋ณต์žก๋„  (1) 2023.10.22