๐Ÿ“

Stack / Queue

Stack

๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์•„์˜ฌ๋ฆฌ๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
ํ•œ๋ฒˆ ๋งˆ์Œ์†์œผ๋กœ ์ƒ์ž๋ฅผ ์Œ“์•„์˜ฌ๋ ค๋ณด์ž. ์Œ“์•„์˜ฌ๋ฆฐ ์ƒ์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ด์•ผํ•  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ƒ์ž๋Š” ๋ฌด์—‡์ผ๊นŒ?
์–ด๋–ค ์ƒ์ž๋ฅผ ๊บผ๋‚ด๋”๋ผ๋„ ์šฐ๋ฆฌ๋Š” ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ƒ์ž๋ถ€ํ„ฐ ๊บผ๋‚ด์•ผํ•œ๋‹ค.
stack๋„ ์ƒ์ž๋ฅผ ์Œ“๋Š” ๊ณผ์ •๊ณผ ๊ฐ™๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์•„์˜ฌ๋ฆฌ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฏ€๋กœ stack์— ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์œผ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์Œ“์•„์˜ฌ๋ฆฐ ๋ฐ์ดํ„ฐ, ์ฆ‰ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ง‘์–ด ๋„ฃ์€ ๋ฐ์ดํ„ฐ์ด๋‹ค.
Stack์˜ ํฐ ํŠน์ง•์€ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ํ•˜๋‚˜์˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ์ œํ•œ์  ์ ‘๊ทผ์— ์žˆ๋‹ค.
์ด๋Ÿฐ ์Šคํƒ์˜ ๊ตฌ์กฐ๋ฅผ LIFO (Last In first Out; ํ›„์ž…์„ ์ถœ) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
์˜ˆ์‹œ
์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—๋„ Stack์„ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋‹ค. ๋ฐ”๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ ๊ฐ€๊ธฐ, ์•ž์œผ๋กœ ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ์ด๋‹ค.
prev stack์—๋Š” ์ด์ „์— ๋ฐฉ๋ฌธํ•œ ํŽ˜์ด์ง€๋ฅผ stack์„ ํ†ตํ•ด ์ €์žฅํ•œ๋‹ค.
๋’ค๋กœ๊ฐ€๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด prev stack์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ €์žฅ๋œ ํŽ˜์ด์ง€๋ฅผ ๊บผ๋‚ด์˜ค๊ณ  next stack์—๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ์ €์žฅํ•œ๋‹ค.
์•ž์œผ๋กœ ๊ฐ€๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด prev stack์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ €์žฅ๋œ ํŽ˜์ด์ง€๋ฅผ ๊บผ๋‚ด์˜ค๊ณ  ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ prev stack์— ์ €์žฅํ•œ๋‹ค.
์Šคํƒ์€ ์ •ํ•ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์„ ์ˆ˜ ์žˆ๋‹ค.
top์€ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š”๋ฐ top์„ ํ†ตํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋„ top์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ„์— ์ถ”๊ฐ€๋œ๋‹ค.

Stack์˜ ์—ฐ์‚ฐ

push : ์š”์†Œ๋ฅผ ์ปฌ๋ ‰์…˜์— ์ถ”๊ฐ€ํ•œ๋‹ค.
pop : ์•„์ง ์ œ๊ฑฐ๋˜์ง€ ์•Š์€ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ฝ์ž…๋œ ์š”์†Œ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.

JavaScript๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

class Stack { constructor() { this.storage = {}; this.length = 0; } push(element) { this.storage[this.length++] = element; } pop() { if (this.length > 0) { let removed = this.storage[--this.length]; return removed; } } size() { return this.length; } empty() { return (this.length ? 0 : 1); } top() { return (this.length === 0 ? -1 : this.storage[this.length]); } }
JavaScript
๋ณต์‚ฌ

Queue

๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
์šฐ๋ฆฌ๊ฐ€ ๋ง›์ง‘์— ๋“ค์–ด๊ฐ€๊ธฐ์œ„ํ•ด ์ค„์„ ์„œ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์‹๋‹น์— ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์€? ๋ฐ”๋กœ ๊ฐ€์žฅ ๋จผ์ € ์ค„์— ์„  ์‚ฌ๋žŒ์ผ ๊ฒƒ์ด๋‹ค.
Queue๋Š” ์ค„๊ณผ ๊ฐ™๋‹ค. Stack๊ณผ๋Š” ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด๋„ฃ์œผ๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๊ฒŒ๋œ๋‹ค.
์ด๋Ÿฐ ํ์˜ ๊ตฌ์กฐ๋ฅผ FIFO (First In First Out; ์„ ์ž…์„ ์ถœ) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
์˜ˆ์‹œ
Queue๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ
์ปดํ“จํ„ฐ ์žฅ์น˜๋“ค ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ์—๋Š” ๊ฐ ์žฅ์น˜ ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ์†๋„, ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ ๊ธฐ์–ต ์žฅ์น˜ buffer๋ฅผ Queue๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„
์œ ํŠœ๋ธŒ์™€ ๊ฐ™์€ ๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ ์•ฑ์„ ํ†ตํ•ด ๋™์˜์ƒ์„ ์‹œ์ฒญํ•  ๋•Œ, ๋‹ค์šด๋กœ๋“œ ๋œ ๋ฐ์ดํ„ฐ(data)๊ฐ€ ์˜์ƒ์„ ์žฌ์ƒํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋™์˜์ƒ์„ ์ •์ƒ์ ์œผ๋กœ ์žฌ์ƒํ•˜๊ธฐ ์œ„ํ•ด Queue์— ๋ชจ์•„ ๋‘์—ˆ๋‹ค๊ฐ€ ๋™์˜์ƒ์„ ์žฌ์ƒํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ์˜€์„ ๋•Œ ๋™์˜์ƒ์„ ์žฌ์ƒ
queue๋Š” ํ•œ ์ชฝ์—์„œ๋Š” ์‚ฝ์ž…, ๋‹ค๋ฅธ ํ•œ ์ชฝ์—์„œ๋Š” ์‚ญ์ œ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
front๋Š” ์‚ญ์ œ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜๋Š” ์ชฝ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ , rear๋Š” ์‚ฝ์ž… ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜๋Š” ์ชฝ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

queue์˜ ์—ฐ์‚ฐ

enqueue : ์š”์†Œ๋ฅผ ์ถ”๊ฐ€
dequeue : ์•„์ง ์ œ๊ฑฐ๋˜์ง€ ์•Š์€ ๊ฐ€์žฅ ๋จผ์ € ์‚ฝ์ž…๋œ ์š”์†Œ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.

JavaScript๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

class Queue { constructor() { this.storage = []; this.length = 0; } push(element) { this.storage[this.length++] = element; } pop() { if (this.length !== 0) { let removed = this.storage[0]; this.storage = this.storage.slice(1); this.length--; return removed; } } size() { return this.length; } empty() { return (this.length ? 0 : 1); } front() { return (this.length ? this.storage[0] : -1); } rear() { return (this.length ? this.storage[this.length - 1] : -1); } }
JavaScript
๋ณต์‚ฌ