Stack - Data-Structure-Study/java-datastructure GitHub Wiki

Stack

Author: Dion๐Ÿฑ, Lynn๐Ÿงžโ€โ™‚๏ธ

์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ž€?

stack1

์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ƒ์ž์— ์ฐจ๊ณก์ฐจ๊ณก ์Œ“๋Š” ๊ฒƒ์„ ์—ฐ์ƒํ•˜๋ฉด ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๊ทธ ์œ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“๊ณ , ์Œ“๊ณ , ์Œ“๋Š” ๊ฒƒ์„ ์—ฐ์ƒํ•˜๋ฉด ๋œ๋‹ค.

๊บผ๋‚ผ ๋•Œ์—๋Š” ๋งจ ์œ„์˜ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ด๋Ÿฐ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ›„์ž…์„ ์ถœ, LIFO(Last in, First out) ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๊ณ  ํ•œ๋‹ค.

์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ์•„๋ž˜๊ฐ€ ๋ง‰ํžŒ ์–ด๋–ค ๋ฌผ์ฒด๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์“ฐ๋ ˆ๊ธฐํ†ต, ๋งˆํŠธ์šฉ ์Œ๋ฃŒ์ˆ˜ ์ง„์—ด๋Œ€ ๋“ฑ ์ด๋Ÿฌํ•œ ๊ฒƒ์ด ์Šคํƒ ๊ตฌ์กฐ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์Šคํƒ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ top์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

์Šคํƒ์€ top์—์„œ๋งŒ ์‚ฝ์ž…, ์‚ญ์ œ, ์ฝ๊ธฐ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํƒ์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ

๋ณดํ†ต ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ๋งํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ฝœ ์Šคํƒ์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ด๋‹ค.

๋ฉ”์†Œ๋“œ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์–ด์ง€๋ฉด์„œ ์ฝœ์Šคํƒ์— ์Œ“์ด๊ฒŒ๋˜๊ณ , ๊ทธ๋ ‡๊ฒŒ ์Œ“์ธ ์ฝœ์Šคํƒ์€ ์œ„์—์„œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด์„œ ์Šคํƒ์ด ๋น„์›Œ์ง€๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด ์Šคํƒ์ด ๊ณ„์†ํ•ด์„œ ์Œ“์—ฌ์„œ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”์†Œ๋“œ ์ฝœ์„ ์Œ“์œผ๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด Stack overflow ์ด๋‹ค.

์Šคํƒ์˜ ๋ฉ”์†Œ๋“œ

  1. ์‚ฝ์ž…(Push)
    • ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  2. ์‚ญ์ œ(Pop)
    • ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํƒ์—์„œ ์‚ญ์ œํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ(Peek)
    • ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ๋ผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  4. ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค ์ฐพ๊ธฐ(Search)
    • ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์Šคํƒ์˜ ๊ตฌํ˜„

  1. ๋ฐฐ์—ด์„ ์ด์šฉํ•œ ๊ตฌํ˜„
  2. Linked List๋ฅผ ์ด์šฉํ•œ ๊ตฌํ˜„

๋ณดํ†ต์˜ ๊ฒฝ์šฐ ์Šคํƒ์€ ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ด๋ฏ€๋กœ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ ํ•ฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žฆ์œผ๋ฏ€๋กœ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์†๋„๋„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์œผ๋ฆฌ๋ผ๊ณ  ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.

์š”์†Œ์˜ ์–‘์ด ๋ณ€ํ™”๊ฐ€ ์žฆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฐฐ์—ด์ด ๋” ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

stack2 ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•  ์Šคํƒ. next๋Š” ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋งˆ์šฐ์Šค๋กœ ๋„ˆ๋ฌด ์ž˜ ๊ทธ๋ ธ๋‹ค.

์Šคํƒ์˜ ํ™œ์šฉ

์Œ“์•„๋†“๊ณ  ์—ญ์ˆœ์œผ๋กœ ์ฝ์–ด๋“ค์ด๋Š” ์ž‘์—…

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํ…Œํฌ๋‹‰

ํŒŒ์„œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ์–‘๋ฐฉํ–ฅ ๋Œ€์นญ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—ฌ๋Š” ๋ถ€๋ถ„์„ ๋งŒ๋‚˜๋ฉด ์Œ“๊ณ , ๋‹ซ๋Š” ๋ถ€๋ถ„์„ ๋งŒ๋‚˜๋ฉด ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (Escape ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋„ ์ง์ž‘๊ฐ€๋Šฅํ•˜๋‹ค.)

  • ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐฉ๋ฌธ๊ธฐ๋ก (๋’ค๋กœ๊ฐ€๊ธฐ) : ๊ฐ€์žฅ ๋‚˜์ค‘์— ์—ด๋ฆฐ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ณด์—ฌ์ค€๋‹ค.

  • ์—ญ์ˆœ ๋ฌธ์ž์—ด ๋งŒ๋“ค๊ธฐ : ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ž…๋ ฅ๋œ ๋ฌธ์ž๋ถ€ํ„ฐ ์ถœ๋ ฅํ•œ๋‹ค.

  • ์‹คํ–‰์ทจ์†Œ (undo) : ๊ฐ€์žฅ ๋‚˜์ค‘์— ์‹คํ–‰๋œ ๊ฒƒ ๋ถ€ํ„ฐ ์‹คํ–‰์„ ์ทจ์†Œํ•œ๋‹ค.

  • ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ๊ณ„์‚ฐ

  • ์ˆ˜์‹์˜ ๊ด„ํ˜ธ ๊ฒ€์‚ฌ (์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ํ‘œํ˜„์„ ์œ„ํ•œ ๊ด„ํ˜ธ ๊ฒ€์‚ฌ)

์Šคํƒ์˜ ADT

  • push(item) : ์Šคํƒ์˜ ๋งจ ์œ—๋ถ€๋ถ„์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • pop() : ์Šคํƒ์˜ ๋งจ ์œ—๋ถ€๋ถ„์˜ ์›์†Œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
  • peek() : ์Šคํƒ์˜ ๋งจ ์œ—๋ถ€๋ถ„์˜ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • isEmpty() : ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • (์„ ํƒ) search(item) : item์˜ index๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์†Œ๊ฐ

  • Dion
    • ๋‹ค ํ•˜๊ณ  ์ ๊ธฐ
  • Ever
    • ์Šคํƒ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋‹ˆ ์Šคํƒ์˜ ์‚ฌ์šฉ๋ฒ•๋งŒ์„ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์žฌ๋ฐŒ์—ˆ๋‹ค. ์•ž์œผ๋กœ๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค!
  • Hamill
    • ๋ฐฐ์—ด, ๋ฐฐ์—ด๋ฆฌ์ŠคํŠธ, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ 3๊ฐ€์ง€๋ฅผ ํ™œ์šฉํ•ด ์Šคํƒ์„ ๊ตฌํ˜„ํ•ด๋ณด๋‹ˆ ์ด์ „ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ณต์Šต๋„ ํ•˜๊ณ  ์Šคํƒ์— ๊ผญ ํ•„์š”ํ•œ ์—ฐ์‚ฐ์ด ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ์–ด๋–ค ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋Š”์ง€ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค. ํŠนํžˆ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์Šคํƒ์ด ์ž์ฃผ ์“ฐ์ธ๋‹ค๊ณ  ํ•ด์„œ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ๊ณต๋ถ€๋„ ์กฐ๊ธˆ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ์˜จ๋ผ์ธ ์ง„ํ–‰์ด ๋‚˜์˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค.
  • Lynn
    • ์ด์ „์— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณต๋ถ€ํ•œ ์ ์ด ์žˆ์–ด์„œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์Šคํƒ์„ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ์•„์ฃผ ์–ด๋ ต์ง€๋Š” ์•Š์•˜๋‹ค. ์˜จ๋ผ์ธ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ์€๋“ฏ
  • Sunny
    • ์Šคํƒ์„ ์ฒ˜์Œ์—” ๋ฐฐ์—ด๋กœ ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ์ง์ ‘ํ•ด๋ณด๋‹ˆ ๋„ˆ๋ฌด ๋ณ„๋กœ์˜€๋‹ค. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ Node๋ฅผ ์ž‡๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๋‹ˆ ๊ตฌํ˜„์„ ์„ฑ๊ณตํ–ˆ๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ง€์‹์ด ๋ถ€์กฑํ•˜๋‹ค๋ณด๋‹ˆ ์œ ํŠœ๋ธŒ์—์„œ ๋ณด๋ฉด์„œ ๋งŒ๋“ค์—ˆ๋‹ค. ๋‹ค์Œ์—๋Š” JavaDocs๋‚˜ ์ฑ…์œผ๋กœ ๋ณด๋ฉด์„œ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ๊ฒ ๋‹ค.