Stack
Stack์ ๊ตฌ์กฐ๋ ์์ง์ผ๋ก ์์ธ ๋ฌผ๊ฑด์ ๋๋ฏธ๋ฅผ ์๊ฐํ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฌผ์ฒด๋ฅผ ๊ฑท์ด๋ผ ๋ ๋ง์ง๋ง ์ถ๊ฐ๋ ๊ฒ์ด ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋ ๊ฒ์ด๋ค. ์ ์๋ ์ฑ ์ด ์์ฌ์๋ ๊ฒ์ ์์ํด ๋ณด๋ฉด ์ดํดํ ์ ์์ ๊ฒ์ด๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ LIFO ๊ตฌ์กฐ์ด๋ค. LIFO๊ฐ ๋ฌด์์ด๋๋ฉด ํ์ (Last In) ์ ์ถ(First Out)์ ์๋ฏธํ๋ค. Java์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์ ์คํ ๋ฉ๋ชจ๋ฆฌ์๋ ์คํ ํ๋ ์์ด push ๋๊ฑฐ๋ pop ๋๋ค. ๋ํ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ํธ์ถ ์์๋ stack ๊ตฌ์กฐ์ ๋์ผํ๋ค.
๊ฐ๋จํ ์์๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์กด์ฌํ๋ค๊ณ ํ์. ์น ๋ธ๋ผ์ฐ์ ๋ ์๋์ ๊ฐ์ด ๋ฐฉ๋ฌธ ์์๋ฅผ ์ ์ฅํ๊ณ ์๋ค.


naver๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋ค๋ฉด ์คํ์๋ ์์ ๊ฐ์ด ๋ธ๋ผ์ฐ์ ์ url์ด ๋ด๊ฒจ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ์ต์๋จ์ ์กด์ฌํ๋ likedin ๋ถํฐ ์์ฐจ์ ์ผ๋ก ์คํ์์ ์ ๊ฑฐ๋ ๊ฒ์ด๋ค.
์คํ์ ๊ตฌํ
Array
์คํ์ ๋ฐฐ์ด๋ก ๊ตฌํํ๋ฉด ๊ตฌํ์ด ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์คํ์ ๊ธฐ๋ฅ(์ฐ์ฐ)๋ค์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค. ๋จ์ ์ผ๋ก๋ ๋ฐฐ์ด ์ฌ์ฉ์ผ๋ก ์ธํ ๊ณ ์ ๋ ํฌ๊ธฐ์ด๋ค.
Linked List
์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ์คํ์ ์์ฑํ๋ฉด ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ด๋ค. ์ฆ, ์ํ๋ ๋งํผ ์์๋ฅผ ์ฝ์ ํ ์ ์๋ค. ๋จ์ ์ผ๋ก๋ ๊ตฌํ์ด ๋ฐฐ์ด๋ณด๋ค๋ ๊น๋ค๋กญ๋ค.
Java์์ ์ ๊ณตํ๋ Stack
java๋ Stack ํด๋์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
Obejct push(Object Item) : stack์ Object(item)์ ์ ์ฅ
O(1)
Object pop() : ์คํ ์ต์๋จ์ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด๊ณ ๋ฐํํ๋ค.
O(1)
Object peek() : ์คํ ์ต์๋จ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ง๋ง ๊บผ๋ด์ง๋ ์๋๋ค.
O(1)
boolean empty() : ์คํ์ด ๋น์ด์๋์ง ํ์ธํ๋ค.
O(1)
int size() : ์คํ์ ํฌ๊ธฐ๋ฅผ ๋ฐํํ๋ค.
int search(Object o) : ์ฐพ๋ ๊ฐ์ฒด(o)๋ฅผ ์ฐพ์์ ์์น(index)๋ฅผ ๋ฐํํ๋ค.
์์ผ๋ฉด -1์ ๋ฐํํ๊ณ , ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ index๋ 1๋ถํฐ ์์ํ๋ค.
O(N)
Stack ๋์ Deque?
A more complete and consistent set of LIFO stack operations is provided by the Deque interface and its implementations, which should be used in preference to this class. https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Stack.html
java ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด Stack ๋ณด๋ค๋ Dequeue๋ฅผ ๊ถ์ฅํ๋ค.
Deque(๋ฑ)์ ์๋ฐฉํฅ์ผ๋ก ์ฝ์ ํ๊ณ ์ญ์ ๊ฐ ๊ฐ๋ฅํ queue ์๋ฃ๊ตฌ์กฐ๋ก ์ดํดํ๋ฉด ๋๋ค.
dequeue๋ฅผ ๊ถ์ฅํ๋ ์ด์ ๋ Stack์ Vector๋ฅผ ์์๋ฐ์ ๊ตฌํ๋์๋๋ฐ ์คํ์ด ๋จ์ ์ ๊ทธ๋๋ก ๊ฐ์ง๊ณ ์๋ค. (๋ฉ์๋๋ค์ด ๋๊ธฐํ๋ฅผ ์งํํ๋ค๋ ๋ฌธ์ .. etc)
๊ฒฐ๋ก ์ Stack ๋์ ArrayDeque, ๋จ์ผ ์ค๋ ๋์์๋ ArrayDeque ๋ฉํฐ ์ค๋ ๋์์ ์คํ์ ์ฌ์ฉํ๋ค๋ฉด LinkedBlockingDeque ๋๋ ConcurrentLinkedDeque์ ์ฌ์ฉ์ ๊ถ์ฅํ๋ค.
LinkedBlockingDeque๋ ํ ๋ฒ์ ๋จ์ผ ์ค๋ ๋์์๋ง ๋ฐ์ดํฐ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ฉฐ
ConcurrentLinkedDeque๋ ์ฌ๋ฌ ์ค๋ ๋์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ ํจ์จ์ ์ธ lock-free ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ์ฐ์ ์์๊ฐ ๋ฎ์ ์ค๋ ๋๊ฐ ๋ฝ์ ์ ์ ํ๋ ์ํฉ์ด๋ ๋ฐ๋๋ฝ์ ๊ฑธ๋ฆฌ๋ ์ํฉ์ ๋ง์์ค๋ค.
Last updated