web developer๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป

์ž๋ฃŒ๊ตฌ์กฐ (Data Structure) ๋ณธ๋ฌธ

Basic

์ž๋ฃŒ๊ตฌ์กฐ (Data Structure)

natrue 2020. 9. 17. 11:06
728x90

 

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

  • ์ž๋ฃŒ๊ตฌ์กฐ (data structure) : ์ปดํ“จํ„ฐ ๊ณผํ•™์—์„œ ํšจ์œจ์ ์ธ ์ ‘๊ทผ ๋ฐ ์ˆ˜์ •์„ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” ์ž๋ฃŒ์˜ ์กฐ์ง, ๊ด€๋ฆฌ, ์ €์žฅ์„ ์˜๋ฏธ, ๋ฐ์ดํ„ฐ ๊ฐ’์˜ ๋ชจ์ž„, ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„, ๋ฐ์ดํ„ฐ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋‚˜ ๋ช…๋ น์„ ์˜๋ฏธ - ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ณด๋‹ค ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ. 

 

 

์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ 

์ž๋ฃŒ๊ตฌ์กฐ์—๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”๋ฐ ๊ฐ๊ฐ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ฐ๊ฐ์˜ ์—ฐ์‚ฐ ๋ฐ ๋ชฉ์ ์— ๋งž์ถฐ์ง

B-ํŠธ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ํšจ์œจ์ ์ด๋ฉฐ, ๋ผ์šฐํŒ… ๋ฐ์ด๋ธ”์€ ๋„คํŠธ์›Œํฌ(์ธํ„ฐ๋„ท, ์ธํŠธ๋ผ๋„ท)์— ์ผ๋ฐ˜์ ์ด๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„ํ•  ๋•Œ ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ• ์ง€ ๊ฐ€์žฅ ์šฐ์„ ์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

ํฐ ์‹œ์Šคํ…œ์„ ์ œ์ž‘ํ•  ๋•Œ ๊ตฌํ˜„์˜ ๋‚œ์ด๋„๋‚˜ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์˜ ์„ฑ๋Šฅ์ด ์ž๋ฃŒ๊ตฌ์กฐ์— ํฌ๊ฒŒ ์˜์กดํ•œ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์„ ํƒ๋˜๋ฉด ์ ์šฉํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ช…ํ™•ํ•ด์ง„๋‹ค.

 

 

 

์ž๋ฃŒ๊ตฌ์กฐ ํŠน์ง•

์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠน์ง•์€ ํšจ์œจ์„ฑ, ์ถ”์ƒํ™”, ์žฌ์‚ฌ์šฉ์„ฑ์ด๋‹ค. 

  • ํšจ์œจ์„ฑ : ์ƒํ™ฉ์— ๋งž๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฃŒ๋ฅผ ๊ตฌ์กฐํ™”์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • ์ถ”์ƒํ™” : ๋ณต์žกํ•œ ์ž๋ฃŒ, ๋ชจ๋“ˆ, ์‹œ์Šคํ…œ ๋“ฑ์œผ๋กœ๋ถ€ํ„ฐ ํ•ต์‹ฌ์ ์ธ ๊ฐœ๋… ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ„์ถ”๋ ค ๋‚ด๋Š” ๊ฒƒ 
  • ์žฌ์‚ฌ์šฉ์„ฑ : ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋ฏ€๋กœ ๋ชจ๋“ˆํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 

์ž๋ฃŒ๊ตฌ์กฐ ๋ถ„๋ฅ˜

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ตฌํ˜„, ํ˜•ํƒœ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

 

* ๊ตฌํ˜„์— ๋”ฐ๋ผ 

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

๋ฐฐ์—ด Array - ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ , ๋ฐฐ์—ด ์•ˆ์— ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜๋ณต๋ฌธ๊ณผ ๊ฒฐํ•ฉํ•˜๋ฉด ์ •๋ณด ํšจ์œจ์  ๊ด€๋ฆฌ, ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ง , ์ธ๋ฑ์Šค ์‹๋ณ„ + ์กฐํšŒ ๊ฐ€๋Šฅ

 

Array

 

 

  • ํŠœํ”Œ :  ๋‘˜ ์ด์ƒ์˜ ์ž๋ฃŒํ˜•์„ ๋ฌถ์Œ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ๊ตฌ์กฐ

 

Tuple

 

 

  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(linked List) : ๋…ธ๋“œ๋ฅผ ๋‹จ์œ„๋กœ ํ•œ๋‹ค. ๋…ธ๋“œ๋Š” ์ž๋ฃŒ์™€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ
  • ์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ : ๊ฐ ๋…ธ๋“œ๋Š” ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ์ฒ˜์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์›ํ˜• ๋ฆฌ์ŠคํŠธ์ด๋‹ค.
  • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ : ๊ฐ ๋…ธ๋“œ๋Š” ์ด์ „ ๋…ธ๋“œ์™€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ฒ˜์Œ ๋…ธ๋“œ์˜ ์ด์ „ ๋…ธ๋“œ์™€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋Š” ์—†๋‹ค.
  • ํ™˜ํ˜• ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ :  ์ฒ˜์Œ ๋…ธ๋“œ๊ฐ€ ์ด์ „ ๋…ธ๋“œ๋กœ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ฒ˜์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์ด๋‹ค.

๋ฆฌ์ŠคํŠธ List - ๋ฐฐ์—ด์ด ๊ฐ–๋Š” ์ธ๋ฑ์Šค ๊ตฌ์กฐ์˜ ์žฅ์ ์„ ๋ฒ„๋ฆฐ ๋Œ€์‹  ๊ฐ ๋ฐ์ดํ„ฐ์˜ ๋นˆํ‹ˆ์„ ์—†์• ๋Š” ๋ฐฉ๋ฒ• ์„ ํƒ , ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์˜ ๋‚ญ๋น„๊ฐ€ ์ค„๊ณ , ๊ฒ€์ƒ‰์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•œ ๊ฒƒ์ด ํŠน์ง•

 

List

 

 

 

 

 

* ํ˜•ํƒœ์— ๋”ฐ๋ผ

(์„ ํ˜•๊ตฌ์กฐ)

  • ์Šคํƒ : ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋จผ์ € ์ €์žฅ๋œ ๊ฒƒ์ด ๊บผ๋‚ด์–ด ์“ธ ๋•Œ๋Š” ์ œ์ผ ๋‚˜์ค‘์— ๋‚˜์˜จ๋‹ค.  ๋ฐ˜๋Œ€๋กœ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ €์žฅ๋œ ๊ฒƒ์ด ๊บผ๋‚ด์–ด ์“ธ ๋•Œ๋Š” ์ œ์ผ ๋จผ์ € ๋‚˜์˜จ๋‹ค. 

์Šคํƒ(Stack) - ํ”ํžˆ ์Šคํƒ์„ ์Œ“๋Š”๋‹ค๊ณ  ์ด์•ผ๊ธฐ ํ•˜๋Š”๊ฒƒ์ฒ˜๋Ÿผ ์Šคํƒ์€ ํ•˜๋‚˜์˜ ๋ฐ”๊ตฌ๋‹ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‹ด๊ฒจ์žˆ๋Š” ํ˜•ํƒœ 

LIFO (Last In First Out) ์˜ˆ) ์›น๋ธŒ๋ผ์šฐ์ € ์•ž์œผ๋กœ ๊ฐ€๊ธฐ ๋’ค๋กœ๊ฐ€๊ธฐ

 

Stack

 

 

  • ํ : ์Šคํƒ๊ณผ ๋ฐ˜๋Œ€๋กœ ํ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋จผ์ € ์ €์žฅ๋œ ๊ฒƒ์ด ์ œ์ผ ๋จผ์ € ๋‚˜์˜จ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ €์žฅ๋œ ๊ฒƒ์ด ๊บผ๋‚ด์–ด ์“ธ ๋•Œ๋Š” ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋‚˜์˜จ๋‹ค. 

ํ(Queue) - FIFO(First-In-First-Out) ์ค„์„ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๋Š” ๋œป, ์ปดํ“จํ„ฐ ๊ณผํ•™ ์ „๋ฐ˜์— ์ž์ฃผ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ, ์˜ˆ ) ๋ฒ„ํผ

์ผ๋ฐ˜์ ์ธ ํ๋Š” ์„ ํ˜•์ด์ง€๋งŒ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด์žˆ๊ณ  ๋นˆ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ๊บผ๋‚ด๊ฑฐ๋‚˜ ํ•œ ์นธ์”ฉ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ.

 

 

Queue

 

 

 

  • ๋ฑ : ์–‘์ชฝ์—์„œ ๋„ฃ๊ธฐ์™€ ๋นผ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜ํ™”๋œ ์„ ํ˜• ๊ตฌ์กฐ์ด๋‹ค.

๋ฑ(Deque) - ๋ฑ์€ ํ์™€ ์Šคํƒ์„ ํ•ฉ์นœ ๊ฒƒ. ํ๋Š” ๋’ค์—๋งŒ ์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์Šคํƒ์€ ์œ„์—๋งŒ ์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ฑ์€ ์•ž๋’ค ๋ชจ๋‘ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

Deque

 

 

 

(๋น„์„ ํ˜• ๊ตฌ์กฐ)

  • ๊ทธ๋ž˜ํ”„  : ๊ผญ์ง“์ ๊ณผ ๊ผญ์ง“์ ์„ ์ž‡๋Š” ๋ณ€์œผ๋กœ ๊ตฌ์„ฑ (์œ ํ–ฅ ๊ทธ๋ž˜ํ”„ - ๋ณ€์˜ ๋ฐฉํ–ฅ์€ ๋ณดํ†ต ๋ถ€๋ชจ๋ฅผ ๊ฐ€๋ฆฌํ‚ด/ ๋ฌดํ–ฅ ๊ทธ๋ž˜ํ”„ - ์ˆœํ™˜์ด ์—†๋Š” ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„)

๊ทธ๋ž˜ํ”„(Gragh) - ๋‹จ์ˆœํžˆ ๋…ธ๋“œ์™€ ๊ทธ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—์ง€๋ฅผ ํ•˜๋‚˜๋กœ ๋ชจ์•„ ๋†“์€ ์ž๋ฃŒ๊ตฌ์กฐ, ์—ฐ๊ฒฐ๋ผ์žˆ๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ , ์˜ˆ ) ์ง€๋„, ์ง€ํ•˜์ฒ , ๋…ธ์„ ๋„ ์ตœ๋‹จ๊ฒฝ๋กœ, ์ „๊ธฐํšŒ๋กœ, ๋„๋กœ

 

 

Graph

 

 

  • ํŠธ๋ฆฌ : ๋ฟŒ๋ฆฌ์™€, ๋ฟŒ๋ฆฌ ๋˜๋Š” ๋‹ค๋ฅธ ๊ผญ์ง“์ ์„ ๋‹จ ํ•˜๋‚˜์˜ ๋ถ€๋ชจ๋กœ ๊ฐ–๋Š” ๊ผญ์ง“์ ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๊ตฌ์กฐ. ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„๋Š” ๋ณ€์œผ๋กœ ํ‘œํ˜„ (์ด์ง„ํŠธ๋ฆฌ - ์ž์‹์ด ์ตœ๋Œ€ ๋‘ ๊ฐœ์ธ ํŠธ๋ฆฌ / ํž™ - ์ด์ง„ํŠธ๋ฆฌ์˜ ์ผ์ข…์œผ๋กœ ์ด์ง„ํŠธ๋ฆฌ์— ์–ด๋–ค ํŠน์„ฑ์„ ๋ถ€์—ฌํ•œ ๊ฒƒ)

ํŠธ๋ฆฌ(Tree) - ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์˜ ํŠน๋ณ„ํ•œ ์ผ€์ด์Šค๋ฉฐ '์ตœ์†Œ ์—ฐ๊ฒฐ ํŠธ๋ฆฌ'๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. ๋‘ ๊ฐœ์˜ ์ •์  ์‚ฌ์ด์— ๋ฐ˜๋“œ์‹œ 1๊ฐœ์˜ ๊ฒฝ๋กœ๋งŒ ๊ฐ€์ง„๋‹ค. ํ•œ ๊ฐœ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋งŒ์ด ์กด์žฌํ•˜๋ฉฐ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋Š” ํ•œ ๊ฐœ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง„๋‹ค. 

 

Tree

 

 

 

 

 

 

 

programmers.co.kr/learn/courses/17

 

์ž๋ฐ”๋กœ ๋ฐฐ์šฐ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ(with ์ƒํ™œ์ฝ”๋”ฉ)

ํ‰๊ฐ€ 5.0 3๊ฐœ์˜ ํ‰๊ฐ€ โ˜…โ˜…โ˜…โ˜…โ˜…3 โ˜…โ˜…โ˜…โ˜…0 โ˜…โ˜…โ˜…0 โ˜…โ˜…0 โ˜…0

programmers.co.kr

opentutorials.org/module/1335

 

Data Structure (์ž๋ฃŒ๊ตฌ์กฐ)

์ˆ˜์—…์ด ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š” ๋‚ด์šฉ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋Ÿญ์ณ ์ค‘์‹ฌ ๋ณธ ์ˆ˜์—…์€ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋Ÿญ์ณ๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋Ÿญ์ณ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ๋ฒ”์œ„์—์„œ ์ œํ•œ์ ์œผ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๋‚ด์žฅ ๋ฐ์ดํ„ฐ ์ŠคํŠธ

opentutorials.org