Array Linked List Stack Queue Tree - accidentlywoo/legacyVue GitHub Wiki

Array Linked List Stack Queue Tree


1. ์ž๋ฃŒ๊ตฌ์กฐ ๊ธฐ๋ณธ - ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ ์ข…๋ฅ˜

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

Array vs Linked List

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ธ Array ์ž๋ฃŒ๊ตฌ์กฐ๋Š”, ๋…ผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๋กœ ํ•ด๋‹น ์›์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฐพ๊ณ ์ž ํ•˜๋Š” ์›์†Œ์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด Big-O(1)์— ํ•ด๋‹น ์›์†Œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ random access๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์‚ญ์ œ ๋˜๋Š” ์‚ฝ์ž…์˜ ๊ณผ์ •์—์„œ๋Š” ํ•ด๋‹น ์›์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ์ž‘์—…์„ ์™„๋ฃŒํ•œ ๋’ค <Big-O(1)>, ๋˜ ํ•œ๊ฐ€์ง€์˜ ์ž‘์—…์„ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฐ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ์›์†Œ ์ค‘ ์–ด๋Š ์›์†Œ๋ฅผ ์‚ญ์ œํ–ˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋ฐฐ์—ด์˜ ์—ฐ์†์ ์ธ ํŠน์ง•์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ญ์ œํ•œ ์›์†Œ๋ณด๋‹ค ํฐ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ–๋Š” ์›์†Œ๋“ค์„ shiftํ•ด์ค˜์•ผ ํ•˜๋Š” cost๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค<Bifg-O(n)>.Array ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์‚ญ์ œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ time complexity์˜ worst case๋Š” Big-O(n)์ด ๋œ๋‹ค. ์‚ฝ์ž…์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ๋งŒ์•ฝ ์ฒซ๋ฒˆ์งธ ์ž๋ฆฌ์— ์ƒˆ๋กœ์šด ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๋ชจ๋“  ์›์†Œ๋“ค์˜ ์ธ๋ฑ์Šค๋ฅผ 1์”ฉ shiftํ•ด์ค˜์•ผ ํ•˜๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ๋„ O(n)์˜ ์‹œ๊ฐ„์„ ์š”๊ตฌํ•˜๊ฒŒ ๋œ๋‹ค.

์ด ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ linked list์ด๋‹ค. ๊ฐ๊ฐ์˜ ์›์†Œ๋“ค์€ ์ž๊ธฐ ์ž์‹  ๋‹ค์Œ์— ์–ด๋–ค ์›์†Œ์ธ์ง€๋งŒ์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ถ€๋ถ„๋งŒ ๊ณ ์ณ์ฃผ๋ฉด ์‚ญ์ œ์™€ ์‚ฝ์ž…์„ O(1) ๋งŒ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.ํ•˜์ง€๋งŒ linked list ์—ญ์‹œ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ฐ”๋กœ Searching ๊ณผ์ •์— ์žˆ์–ด์„œ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ํ™•์ธํ•ด๋ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋…ผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.์ด ๊ณผ์ • ๋•Œ๋ฌธ์—, ์–ด๋– ํ•œ ์›์†Œ๋ฅผ ์‚ญ์ œ ๋˜๋Š” ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ–ˆ์„ ๋•Œ, ๊ทธ ์›์†Œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ O(n)์˜ ์‹œ๊ฐ„์ด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๊ธฐ ๋œ๋‹ค. ๊ฒฐ๊ตญ linked list ์ž๋ฃŒ๊ตฌ์กฐ๋Š” searching์—๋„ O(n)์˜ time complexity๋ฅผ ๊ฐ–๊ณ , ์‚ฝ์ž…, ์‚ญ์ œ์— ๋Œ€ํ•ด์„œ๋„ O(n)์˜ time complexity๋ฅผ ๊ฐ–๋Š”๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ์•„์ฃผ ์“ธ๋ชจ์—†๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์•„๋‹ˆ๊ธฐ์—, ์šฐ๋ฆฌ๊ฐ€ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด linkes list๋Š” tree๊ตฌ์กฐ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, tree์—์„œ ์‚ฌ์šฉ๋˜์—ˆ์„ ๋•Œ ๊ทธ ์œ ์šฉ์„ฑ์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค.

Stack vs Queue

Stack ์ž๋ฃŒ๊ตฌ์กฐ๋Š” Last In First Out(LIFO) ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ๋†ˆ์ด ๋จผ์ € ๋‚˜์˜จ๋‹ค. Stack์˜ ํŠน์ง•์ด๋‹ค. ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์ด๋Š” ๊ตฌ์กฐ๋กœ ๋จผ์ € stack์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ ์›์†Œ๋Š” ๋งจ ๋ฐ”๋‹ฅ์— ๊น”๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋Šฆ๊ฒŒ ๋“ค์–ด๊ฐ„ ๋…€์„๋“ค์€ ๊ทธ ์œ„์— ์Œ“์ด๊ฒŒ ๋˜๊ณ  ํ˜ธ์ถœ ์‹œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋…€์„์ด ํ˜ธ์ถœ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

Queue ์ž๋ฃŒ๊ตฌ์กฐ๋Š” First In First Out(FIFO) ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋†ˆ์ด ๋จผ์ € ๋‚˜์˜จ๋‹ค. Stack ๊ณผ๋Š” ๋ฐ˜๋Œ€๋กœ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋†ˆ์ด ๋งจ ์•ž์—์„œ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๊ฒŒ ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

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

Tree

ํŠธ๋ฆฌ๋Š” ์Šคํƒ์ด๋‚˜ ํ์™€ ๊ฐ™์€ ์„ ํ˜• ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํŠธ๋ฆฌ๋Š” ๊ณ„์ธต์  ๊ด€๊ณ„(Hierachical Relationship)์„ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ด ํŠธ๋ฆฌ๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํ‘œํ˜„์— ์ง‘์ค‘ํ•œ๋‹ค. ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ๊ณ ์—์„œ ๋ฒ—์–ด๋‚˜ ํŠธ๋ฆฌ๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ฐ”๋ผ๋ณด์ž.

ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ตฌ์„ฑ์š”์„œ๋“ค Node(๋…ธ๋“œ) : ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ฐ๊ฐ์˜ ์š”์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Edge(๊ฐ„์„ ) : ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ์„ ์˜๋ฏธํ•œ๋‹ค. **Root Node(๋ฃจํŠธ ๋…ธ๋“œ) : ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ์ตœ์ƒ์œ„์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. **Terminal Node( = Leaf Node, ๋‹จ๋ง ๋…ธ๋“œ) : ํ•˜์œ„์— ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. **Internal Node(๋‚ด๋ถ€๋…ธ๋“œ, ๋น„๋‹จ๋ง ๋…ธ๋“œ) : ๋‹จ๋ง ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋กœ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

-Binary Tree(์ด์ง„ํŠธ๋ฆฌ)

๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋‘ ๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ(ํฐ ํŠธ๋ฆฌ์— ์†ํ•˜๋Š” ์ž‘์€ ํŠธ๋ฆฌ)๋กœ ๋‚˜๋‰˜์–ด ์ง„๋‹ค. ๋˜ํ•œ ๋‚˜๋‰˜์–ด์ง„ ๋‘ ์„œ๋ธŒ ํŠธ๋ฆฌ๋„ ๋ชจ๋‘ ์ด์ง„ ํŠธ๋ฆฌ์—ฌ์•ผ ํ•œ๋‹ค. ์žฌ๊ท€์ ์ธ ์ •์˜๋ผ ๋งž๋Š”๋“ฏ ํ•˜๋ฉด์„œ๋„ ์ดํ•ด๊ฐ€ ์‰ฝ์ง€ ์•Š์„ ๋“ฏํ•˜๋‹ค. ํ•œ ๊ฐ€์ง€ ๋ง๋ถ™์ด์ž๋ฉด ๊ณต์ง‘ํ•ฉ๋„ ์ด์ง„ ํŠธ๋ฆฌ๋กœ ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ์žฌ๊ท€์ ์œผ๋กœ ์กฐ๊ฑด์„ ํ™•์ธํ•ด๊ฐ”์„๋•Œ, leaf node์— ๋‹ค ๋‹ฌ์•˜์„ ๋•Œ, ์ •์˜๊ฐ€ ๋งŒ์กฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜ ๋ฟ์ธ ๊ฒƒ๋„ ์ด์ง„ ํŠธ๋ฆฌ์ •์˜์— ๋งŒ์กฑํ•˜๊ฒŒ ๋œ๋‹ค.

ํŠธ๋ฆฌ์—์„œ๋Š” ๊ฐ ์ธต๋ณ„๋กœ ์ˆซ์ž๋ฅผ ๋งค๊ฒจ์„œ ์ด๋ฅผ ํŠธ๋ฆฌ์˜ 'Level(๋ ˆ๋ฒจ)'์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ ˆ๋ฒจ์˜ ๊ฐ’์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๋”ฐ๋ผ์„œ ๋ฃจํŠธ ๋…ธํŠธ์˜ ๋ ˆ๋ฒจ์€ 0์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠธ๋ฆฌ์˜ ์ตœ๊ณ  ๋ ˆ๋ฒจ์„ ๊ฐ€๋ฆฌ์ผœ 'height(๋†’์ด)'๋ผ๊ณ  ํ•œ๋‹ค.

-- Full Binart Tree(ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ)

๋ชจ๋“  ๋ ˆ๋ฒจ์ด ๊ฝ‰ ์ฐฌ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌ์ผœ ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.

-- Complete Binary Tree(์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ)

์œ„์—์„œ ์•„๋ž˜๋กœ, ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์ฐจ๊ณก์ฐจ๊ณก ์ฑ„์›Œ์ง„ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ