Stack - Data-Structure-Study/java-datastructure GitHub Wiki
Stack
Author: Dion๐ฑ, Lynn๐งโโ๏ธ
์คํ ์๋ฃ๊ตฌ์กฐ๋?
์คํ ์๋ฃ๊ตฌ์กฐ๋ ์์์ ์ฐจ๊ณก์ฐจ๊ณก ์๋ ๊ฒ์ ์ฐ์ํ๋ฉด ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๊ทธ ์์ ๋ฐ์ดํฐ๋ฅผ ์๊ณ , ์๊ณ , ์๋ ๊ฒ์ ์ฐ์ํ๋ฉด ๋๋ค.
๊บผ๋ผ ๋์๋ ๋งจ ์์ ๋ฐ์ดํฐ๋ถํฐ ์ฐจ๋ก๋ก ๊บผ๋ผ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์ด๋ฐ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ ์ ์ถ, LIFO(Last in, First out) ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ํ๋ค.
์ฝ๊ฒ ์ค๋ช ํ์๋ฉด ์๋๊ฐ ๋งํ ์ด๋ค ๋ฌผ์ฒด๋ฅผ ์๊ฐํ๋ฉด ๋๋ค. ์ฐ๋ ๊ธฐํต, ๋งํธ์ฉ ์๋ฃ์ ์ง์ด๋ ๋ฑ ์ด๋ฌํ ๊ฒ์ด ์คํ ๊ตฌ์กฐ์ด๋ค.
๊ทธ๋ฆฌ๊ณ , ์คํ์ ๋ง์ง๋ง ์์๋ฅผ top์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
์คํ์ top์์๋ง ์ฝ์ , ์ญ์ , ์ฝ๊ธฐ ๋์์ด ๋ฐ์ํ ์ ์๋ค.
์คํ์ ๋ํ์ ์ธ ์
๋ณดํต ์ฐ๋ฆฌ๊ฐ ํํ ๋งํ๋ ๋ฉ์๋ ์ฝ ์คํ์ด ๋ํ์ ์ธ ์์ด๋ค.
๋ฉ์๋๊ฐ ์์ฐจ์ ์ผ๋ก ์ฝ์ด์ง๋ฉด์ ์ฝ์คํ์ ์์ด๊ฒ๋๊ณ , ๊ทธ๋ ๊ฒ ์์ธ ์ฝ์คํ์ ์์์๋ถํฐ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ฉด์ ์คํ์ด ๋น์์ง๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ด ์คํ์ด ๊ณ์ํด์ ์์ฌ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ๋ณด๋ค ๋ ๋ง์ ๋ฉ์๋ ์ฝ์ ์์ผ๋ ค๊ณ ํ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด Stack overflow ์ด๋ค.
์คํ์ ๋ฉ์๋
- ์ฝ์
(Push)
- ๋ง์ง๋ง ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํฉ๋๋ค.
- ์ญ์ (Pop)
- ๋ง์ง๋ง ์์น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์คํ์์ ์ญ์ ํ๊ณ ๋ฐํํฉ๋๋ค.
- ๋ง์ง๋ง ๋ฐ์ดํฐ ์ฝ๊ธฐ(Peek)
- ๋ง์ง๋ง ์์น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ๋ฐ์ดํฐ๋ ์ฌ๋ผ์ง์ง ์์ต๋๋ค.
- ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค ์ฐพ๊ธฐ(Search)
- ์ฐพ๊ณ ์ ํ๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค.
์คํ์ ๊ตฌํ
- ๋ฐฐ์ด์ ์ด์ฉํ ๊ตฌํ
- Linked List๋ฅผ ์ด์ฉํ ๊ตฌํ
๋ณดํต์ ๊ฒฝ์ฐ ์คํ์ ์ฝ์ ์ญ์ ๊ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ ์๋ฃ๊ตฌ์กฐ ์ด๋ฏ๋ก ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ์ ํฉํ ๊ฒ์ด๋ผ๊ณ ์ถ์ธกํ ์ ์๋ค.
๋ํ, ๋ง์ง๋ง ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ๊ฐ ์ฆ์ผ๋ฏ๋ก ์ํ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์๋๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ผ๋ฆฌ๋ผ๊ณ ์ถ์ธกํ ์ ์๋ค.
์์์ ์์ด ๋ณํ๊ฐ ์ฆ๊ธฐ ๋๋ฌธ์ ์คํ์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ค์ด ๋ฐฐ์ด์ด ๋ ๋นํจ์จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํํ ์คํ. next๋ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋ง์ฐ์ค๋ก ๋๋ฌด ์ ๊ทธ๋ ธ๋ค.
์คํ์ ํ์ฉ
์์๋๊ณ ์ญ์์ผ๋ก ์ฝ์ด๋ค์ด๋ ์์
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ ๋, ์์ฃผ ์ฌ์ฉํ๋ ํ ํฌ๋
ํ์๋ฅผ ๊ตฌํํ ๋, ์๋ฐฉํฅ ๋์นญ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ๋ ๋ถ๋ถ์ ๋ง๋๋ฉด ์๊ณ , ๋ซ๋ ๋ถ๋ถ์ ๋ง๋๋ฉด ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ฐ์๋ ์ฌ์ฉํ ์ ์๋ค. (Escape ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ง์๊ฐ๋ฅํ๋ค.)
-
์น ๋ธ๋ผ์ฐ์ ๋ฐฉ๋ฌธ๊ธฐ๋ก (๋ค๋ก๊ฐ๊ธฐ) : ๊ฐ์ฅ ๋์ค์ ์ด๋ฆฐ ํ์ด์ง๋ถํฐ ๋ค์ ๋ณด์ฌ์ค๋ค.
-
์ญ์ ๋ฌธ์์ด ๋ง๋ค๊ธฐ : ๊ฐ์ฅ ๋์ค์ ์ ๋ ฅ๋ ๋ฌธ์๋ถํฐ ์ถ๋ ฅํ๋ค.
-
์คํ์ทจ์ (undo) : ๊ฐ์ฅ ๋์ค์ ์คํ๋ ๊ฒ ๋ถํฐ ์คํ์ ์ทจ์ํ๋ค.
-
ํ์ ํ๊ธฐ๋ฒ ๊ณ์ฐ
-
์์์ ๊ดํธ ๊ฒ์ฌ (์ฐ์ฐ์ ์ฐ์ ์์ ํํ์ ์ํ ๊ดํธ ๊ฒ์ฌ)
์คํ์ ADT
- push(item) : ์คํ์ ๋งจ ์๋ถ๋ถ์ ์์๋ฅผ ์ถ๊ฐํ๋ค.
- pop() : ์คํ์ ๋งจ ์๋ถ๋ถ์ ์์๋ฅผ ์ญ์ ํ๋ค.
- peek() : ์คํ์ ๋งจ ์๋ถ๋ถ์ ์์๋ฅผ ๋ฐํํ๋ค.
- isEmpty() : ์คํ์ด ๋น์ด์์ผ๋ฉด true๋ฅผ ๋ฐํํ๋ค.
- (์ ํ) search(item) : item์ index๋ฅผ ๋ฐํํ๋ค.
์๊ฐ
- Dion
- ๋ค ํ๊ณ ์ ๊ธฐ
- Ever
- ์คํ์ ์ง์ ๊ตฌํํด๋ณด๋ ์คํ์ ์ฌ์ฉ๋ฒ๋ง์ ๊ณต๋ถํ๋ ๊ฒ๋ณด๋ค ๋ ์ฌ๋ฐ์๋ค. ์์ผ๋ก๋ ์ฌ๋ฌ๊ฐ์ง ์ง์ ๊ตฌํํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค!
- Hamill
- ๋ฐฐ์ด, ๋ฐฐ์ด๋ฆฌ์คํธ, ์ฐ๊ฒฐ๋ฆฌ์คํธ 3๊ฐ์ง๋ฅผ ํ์ฉํด ์คํ์ ๊ตฌํํด๋ณด๋ ์ด์ ์๋ฃ๊ตฌ์กฐ์ ๋ํ ๋ณต์ต๋ ํ๊ณ ์คํ์ ๊ผญ ํ์ํ ์ฐ์ฐ์ด ๋ฌด์์ด ์๋์ง ์ด๋ค ์๋ฃ ๊ตฌ์กฐ๋ก ๋์ด ์๋์ง ๊ณต๋ถํ ์ ์์ด์ ์ข์๋ค. ํนํ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ์คํ์ด ์์ฃผ ์ฐ์ธ๋ค๊ณ ํด์ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ๊ณต๋ถ๋ ์กฐ๊ธ ์งํํ๋ค. ์๊ฐ๋ณด๋ค ์จ๋ผ์ธ ์งํ์ด ๋์์ง ์์ ๊ฒ ๊ฐ๋ค.
- Lynn
- ์ด์ ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ณต๋ถํ ์ ์ด ์์ด์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ์คํ์ ๊ตฌํํ๋๊ฒ ์์ฃผ ์ด๋ ต์ง๋ ์์๋ค. ์จ๋ผ์ธ์ผ๋ก ํ๋ ๊ฒ๋ ๊ด์ฐฎ์๋ฏ
- Sunny
- ์คํ์ ์ฒ์์ ๋ฐฐ์ด๋ก ํ๋ ค๊ณ ํ์ผ๋ ์ง์ ํด๋ณด๋ ๋๋ฌด ๋ณ๋ก์๋ค. ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก Node๋ฅผ ์๋ ๋ฐฉ์์ผ๋ก ํ๋ ๊ตฌํ์ ์ฑ๊ณตํ๋ค. ์๋ฃ๊ตฌ์กฐ์ ๋ํ ์ง์์ด ๋ถ์กฑํ๋ค๋ณด๋ ์ ํ๋ธ์์ ๋ณด๋ฉด์ ๋ง๋ค์๋ค. ๋ค์์๋ JavaDocs๋ ์ฑ ์ผ๋ก ๋ณด๋ฉด์ ์ง์ ๊ตฌํํด์ผ๊ฒ ๋ค.