๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Computer Science/์ž๋ฃŒ๊ตฌ์กฐ

Array & Dynamic Array & Linked List ๋ž€? ์ฐจ์ด์ 

by Jay Din 2023. 5. 22.
728x90
๋ฐ˜์‘ํ˜•

Array์ด๋ž€? 

Array๋Š” ์—ฐ๊ด€๋œ Data๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์—ฐ์†์ ์ด๋ฉฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฏธ๋ฆฌ ํ• ๋‹น๋œ ํฌ๊ธฐ๋งŒํผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

Array์˜ ํŠน์ง•

  • ๊ณ ์ •๋œ ์ €์žฅ ๊ณต๊ฐ„(fixed-size)
  • ์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ(order)

Array์˜ ์žฅ์ ์€ lookup๊ณผ append๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, ์กฐํšŒ๋ฅผ ์ž์ฃผ ํ•ด์•ผ๋˜๋Š” ์ž‘์—…์—์„œ๋Š” Array ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŽ์ด ์“ด๋‹ค.

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

  Array
access O(1)
append O(1)
๋งˆ์ง€๋ง‰ ์›์†Œ
delete
O(1)
insertion O(n)
deletion O(n)
search O(n)

 

์˜ˆ์ƒํ•œ Array์˜ size๋ณด๋‹ค ๋” ๋งŽ์€ ์ˆ˜์˜ data๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋  ๋•Œ, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€?

๊ธฐ์กด size๋ณด๋‹ค ๋” ํฐ Array๋ฅผ ์„ ์–ธํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ ํ• ๋‹นํ•œ๋‹ค.

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒผ๋‹ค๋ฉด ๊ธฐ์กด Array๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œํ•˜๋ฉด ๋œ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๋™์ ์œผ๋กœ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ Dynamic array๋ผ๊ณ  ํ•œ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š”, size๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š๋‹ค๋ฉด Array ๋Œ€์‹  Linked list๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

Dynamic Array ๋ž€? 

Array์˜ ๊ฒฝ์šฐ size๊ฐ€ ๊ณ ์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ ์–ธ์‹œ์— ์„ค์ •ํ•œ size๋ณด๋‹ค ๋งŽ์€ ๊ฐœ์ˆ˜์˜ data๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค.

ํ•˜์ง€๋งŒ Dynamic Array๋Š” ์ €์žฅ๊ณต๊ฐ„์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด resize๋ฅผ ํ•˜์—ฌ ์œ ๋™์ ์œผ๋กœ size๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

Dynamic Array ํŠน์ง•? 

  • resize์„ ํ•˜๋Š” ๋ฐฉ์‹
  • ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ํ•  ๋•Œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„

resize ํ•˜๋Š” ๋ฐฉ์‹

Dynamic Array๋Š” size๋ฅผ ์ž๋™์ ์œผ๋กœ resizeing์„ ํ•˜๋Š” Array์ด๋‹ค.

๊ธฐ์กด์— ๊ณ ์ •๋œ size๋ฅผ ๊ฐ€์ง„ Static Array์˜ ํ•œ๊ณ„์ ์„ ๋ณด์•ˆํ•˜๊ณ ์ž ๊ณ ์•ˆ๋๋‹ค.

Dynamic Array๋Š” data๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•˜๋‹ค๊ฐ€ ๊ธฐ์กด์— ํ• ๋‹น๋œ memory๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด, size๋ฅผ ๋Š˜๋ฆฐ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ๊ทธ๊ณณ์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊น€์œผ๋กœ์จ ๋Š˜์–ด๋‚œ ํฌ๊ธฐ์˜ size๋ฅผ ๊ฐ€์ง„ ๋ฐฐ์—ด์„ ์žฌํƒ„์ƒ์‹œํ‚จ๋‹ค. ์ด๋ฅผ resize๋ผ๊ณ  ํ•œ๋‹ค.

resizing์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ ๊ธฐ์กด Array size์˜ 2๋ฐฐ๋ฅผ ํ• ๋‹นํ•˜๋Š” doubling์ด ์žˆ๋‹ค.

Doubling

resize์˜ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ Doubling์ด ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€(O(1)) ํ•˜๋‹ค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ์กด ๋ฐฐ์—ด์˜ size๋ณด๋‹ค ๋‘ ๋ฐฐ ํฐ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ผ์ด ์˜ฎ๊ธฐ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

n๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ผ์ด ์˜ฎ๊ฒจ์•ผ ํ•˜๋ฏ€๋กœ O(n) ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ธฐํ•˜๊ธ‰์ˆ˜์ (geometric expansion) ์ฆ๊ฐ€ ๋ฐฉ์‹์œผ๋กœ ์ฆ๊ฐ€ํ•ด ๊ธฐ์กด ํฌ๊ธฐ์˜ 2๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•˜๋ฉฐ, ์‚ฌ์šฉ ๊ณต๊ฐ„์ด ์ค„์–ด๋“ค๋ฉด ์ž๋™์œผ๋กœ ๊ฐ์†Œํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•

๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„

๋ถ„ํ• ์ƒํ™˜ ์‹œ๊ฐ„๋ณต์ž๋„ Amortized time complexity

Dynamic array์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค O(1)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.
์ถ”๊ฐ€๋ฅผ ํ•˜๋‹ค๊ฐ€ ๋ฏธ๋ฆฌ ์„ ์–ธ๋œ size๋ฅผ ๋„˜์–ด์„œ๋Š” ์ˆœ๊ฐ„์— resize๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.
์ด๋•Œ๋Š” ์ผ์ผ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์˜ฎ๊ฒจ์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋•Œ ๋งŒํผ์€ O(n)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.
→ ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1) ์ผ๊นŒ?  O(n) ์ผ๊นŒ?

append์˜ ์ด ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ์ถ”๊ฐ€ํ•˜๋Š”(O(1)) ์ž‘์—…์ด ๋Œ€๋‹ค์ˆ˜์ด๊ณ ,

size๋ฅผ ๋„˜์–ด์„ค ๋•Œ๋Š” size๋ฅผ ๋‘ ๋ฐฐ ๋Š˜๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ผ์ด ์˜ฎ๊ธฐ๋Š” ๊ณผ์ • (resize O(n))์ด ์•„์ฃผ ๊ฐ€๋” ๋ฐœ์ƒํ•œ๋‹ค.

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด append์˜ ์ „์ฒด์ ์ธ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋‹ค. ์ข€ ๋” ์ •ํ™•ํžˆ๋Š” amortized O(1)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

 

์ฆ‰, ๊ฐ€๋” ๋ฐœ์ƒํ•˜๋Š” O(n)์˜ resizeํ•˜๋Š” ์‹œ๊ฐ„์„ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” O(1)์˜ ์ž‘์—…๋“ค์ด ๋ถ„๋‹ดํ•ด์„œ ๋‚˜๋ˆ  ๊ฐ€์ง์œผ๋กœ์จ ์ „์ฒด์ ์œผ๋กœ O(1)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

 

Dynamic Array์™€ Linked list ๋น„๊ต ์žฅ๋‹จ์ 

Linked List์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, Dynamic Array์˜ ์žฅ์ ์€

  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ ํ• ๋‹น์ด O(1)๋กœ ๊ต‰์žฅํžˆ ๋น ๋ฅด๋‹ค.
    ์ด๋Š” index ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ์‚ฐ์ˆ ์ ์ธ ์—ฐ์‚ฐ [๋ฐฐ์—ด ์ฒซ data์˜ ์ฃผ์†Œ๊ฐ’] + [offset]์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (random access)
  • Dynamic Array์˜ ๋งจ ๋’ค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅด๋‹ค. O(1)

Linked List์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, Dynamic Array์˜ ๋‹จ์ ์€

  • Dynamic Array์˜ ๋งจ ๋์ด ์•„๋‹Œ ๊ณณ์— data๋ฅผ insert or removeํ•  ๋•Œ, ๋Š๋ฆฐํŽธ์ด๋‹ค.(O(n))
    ๋Š๋ฆฐ ์ด์œ ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์—ฐ์†์œผ๋กœ ๋ฐ์ดํ„ฐ๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ ์‚ญ์ œํ•  ๋•Œ ๋’ค์— ์žˆ๋Š” data๋“ค์„ ๋ชจ๋‘ ํ•œ์นธ์”ฉ shift ํ•ด์•ผ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • resize๋ฅผ ํ•ด์•ผํ•  ๋•Œ, ์˜ˆ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ ํ˜„์ €ํžˆ ๋‚ฎ์€ performance๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • resize์— ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋ฉฐ ํ•„์š”ํ•œ ๊ฒƒ ์ด์ƒ์œผ๋กœ memory ๊ณต๊ฐ„์„ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค.
    ๋”ฐ๋ผ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‚ญ๋น„๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋ฐœ์ƒํ•œ๋‹ค.

Linked List ๋ž€?

Linked List๋Š” Node๋ผ๋Š” ๊ตฌ์กฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. Node๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’๊ณผ ๋‹ค์Œ Node์˜ address๋ฅผ ์ €์žฅํ•œ๋‹ค. Linked List๋Š” ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋Š” ๋น„์—ฐ์†์ ์œผ๋กœ ์ €์žฅ์ด ๋˜์ง€๋งŒ Linked list๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ Node๊ฐ€ next Node์˜ address๋ฅผ ๊ฐ€๋ฆฌํ‚ด์œผ๋กœ์จ ๋…ผ๋ฆฌ์ ์ธ ์—ฐ์†์„ฑ์„ ๊ฐ€์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

Linked List๋Š” tree, graph๋“ฑ ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ž์ฃผ ์“ฐ์ด๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

Linked list๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๋ถˆ์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ ๊ณผ Node์˜ next address๋ฅผ ํ†ตํ•ด ๋ถˆ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค๋Š” ์ ์ด ํ•ต์‹ฌ์ด๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์‹œ์ ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ

๊ฐ Node๋“ค์€ next address ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ๋ฆฌ์ ์œผ๋กœ ์—ฐ์†์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

Array์˜ ๊ฒฝ์šฐ ์—ฐ์†์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์˜€๊ณ ,

Linked list๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์—ฐ์†์„ฑ์„ ์œ ์ง€ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ข€ ๋” ์ž์œ ๋กœ์šด ๋Œ€์‹ , Next address๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ €์žฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋‹น ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋” ์ปค์ง€๊ฒŒ ๋œ๋‹ค. 

 

Linked List๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋Š” ๋ถˆ์—ฐ์†์ ์ด๋‹ค. 

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

Array์˜ ๊ฒฝ์šฐ ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…/์‚ญ์ œํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ์ธ๋ฑ์Šค ๋’ค์— ์žˆ๋Š” ๋ชจ๋“  ์›์†Œ๋“ค์„ shift๋ฅผ ํ•ด์•ผ๋งŒ ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๊ฒŒ ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ Linked list๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์˜ฎ๊ธธ ํ•„์š”์—†์ด next address๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  Linked list
access O(n)
search O(n)
insertion O(1)
deletion O(1)

Data ์‚ฝ์ž…

 

๐ŸŒŸArray vs Linked list ๋น„๊ต ๋ฐ ์„ค๋ช…

Array๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

Linked List๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋Š” ์—ฐ์†์ ์ด์ง€ ์•Š์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์›์†Œ๊ฐ€ ๋‹ค์Œ ์›์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•ด ๋†“์Œ์œผ๋กœ์จ ๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.

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

  Array Linked list
๋ฐ์ดํ„ฐ ์กฐํšŒ O(1) O(n)
์‚ฝ์ž… / ์‚ญ์ œ O(n) O(1)

์ฆ‰, ์–ผ๋งˆ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ์ง€ ๋ฏธ๋ฆฌ ์•Œ๊ณ  ์žˆ๊ณ , ์กฐํšŒ๋ฅผ ๋งŽ์ด ํ•œ๋‹ค๋ฉด Array๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋ฐ˜๋ฉด, ๋ช‡ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ์ง€ ๋ถˆํ™•์‹คํ•˜๊ณ  ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ์žฆ๋‹ค๋ฉด Linked list๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค. 

๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

Array์™€ Linked list์˜ ์ฃผ๋œ ์ฐจ์ด์ ๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๊ธฐ์ธํ•œ๋‹ค.

Array๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ ,

Linked list๋Š” ๋ถˆ์—ฐ์†์ ์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์˜ ์ฐจ์ด๋กœ ์ธํ•ด operation ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๊ณ  ์‹œ๊ฐ„๋ณต์žก๋„๋„ ๋‹ค๋ฅด๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ ํ™œ์šฉ๋„์—์„œ๋„ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

์กฐํšŒ (lookup)

Array ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ์ฆ‰์‹œ ์ ‘๊ทผ(random access O(1))
Linked list ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๋ถˆ์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ฐจ ์ ‘๊ทผ(Sequential Access)๋งŒ ๊ฐ€๋Šฅ
์ฆ‰, ํŠน์ • index์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด O(n)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

์‚ฝ์ž… / ์‚ญ์ œ (insert / delete)

Array ๋งจ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œ ํ•˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1)์ด๋‹ค.
ํ•˜์ง€๋งŒ ๋งจ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ์•„๋‹Œ ์ค‘๊ฐ„์— ์žˆ๋Š” ์›์†Œ๋ฅผ ์‚ฝ์ž…/์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น ์›์†Œ๋ณด๋‹ค ํฐ ์ธ๋ฑ์Šค์˜ ์›์†Œ๋“ค์„ ํ•œ ์นธ์”ฉ shift ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ์—๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n)์ด ๋œ๋‹ค.
Linked list ์–ด๋Š ์›์†Œ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œ ํ•˜๋”๋ผ๋„ node์—์„œ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ถ€๋ถ„๋งŒ ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— shiftํ•  ํ•„์š” ์—†์ด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1)์ด๋‹ค.
ํ•˜์ง€๋งŒ Linked list์˜ ๊ฒฝ์šฐ ์ถ”๊ฐ€/์‚ญ์ œ๋ฅผ ํ•˜๋ ค๋Š” index๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š”๋ฐ O(n)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์งˆ์ ์œผ๋กœ Linked List๋„ ์ถ”๊ฐ€/์‚ญ์ œ ์‹œ์— O(n)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

memory

Array Array์˜ ์ฃผ๋œ ์žฅ์ ์€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ append๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ผ๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋ฐฐ์—ด์€ ์„ ์–ธ์‹œ์— fixed size๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ•œ๋‹ค.
์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๋”๋ผ๋„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
Linked list Linked list๋Š” runtime์ค‘์—์„œ๋„ size๋ฅผ ๋Š˜๋ฆฌ๊ณ  ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
initial size๋ฅผ ๊ณ ๋ฏผํ•  ํ•„์š” ์—†๊ณ , ํ•„์š”ํ•œ ๋งŒํผ memory allocation์„ ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์—†๋‹ค.  

 

๋ฐ˜์‘ํ˜•

 

์ •๋ฆฌ

์–ด๋Š ์ƒํ™ฉ์— Linked list๋ฅผ ์“ฐ๋Š”๊ฒŒ Array๋ณด๋‹ค ๋” ๋‚˜์„๊นŒ? 

  • O(1)์œผ๋กœ ์‚ฝ์ž…/์‚ญ์ œ๋ฅผ ์ž์ฃผ ํ•ด์•ผ ๋  ๋•Œ
  • ๋ฐ์ดํ„ฐ ์–‘์„ ์˜ˆ์ธก ํ•  ์ˆ˜ ์—†์„ ๋•Œ
  • ์กฐํšŒ ์ž‘์—…์„ ๋ณ„๋กœ ํ•˜์ง€ ์•Š์„ ๋•Œ

์–ด๋Š ์ƒํ™ฉ์— Array๋ฅผ ์“ฐ๋Š”๊ฒŒ Linked list๋ณด๋‹ค ๋” ๋‚˜์„๊นŒ? 

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

Array์™€ Linked list์˜ memory allocation์€ ์–ธ์ œ ์ผ์–ด๋‚˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์˜ ์–ด๋Š ์˜์—ญ์„ ํ• ๋‹น ๋ฐ›์„๊นŒ?

Array compile ๋‹จ๊ณ„์—์„œ memory allocation์ด ์ผ์–ด๋‚œ๋‹ค.
์ด๋ฅผ Static Memory Allocation์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
์ด ๊ฒฝ์šฐ Stack memory ์˜์—ญ์— ํ• ๋‹น ๋œ๋‹ค.
Linked list runtime ๋‹จ๊ณ„์—์„œ ์ƒˆ๋กœ์šด node๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค memory allocation์ด ์ผ์–ด๋‚œ๋‹ค.
Dynamic Memory Allocation์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.

 


์ฐธ๊ณ 

https://media.geeksforgeeks.org/wp-content/uploads/20220829110944/LLdrawio.png

https://www.nossi.dev/

728x90
๋ฐ˜์‘ํ˜•