๐ก Stack
์คํ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ๋ก ๋์ค๋ ์ฑ์ง(LIFO, Last In First Out)์ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์คํ์ ์์๋ฅผ ์ฝ์ ํ ๋๋ ๊ทธ๋ฅ ๋ง์ง๋ง ์์น์ ์ฌ๋ฆฌ๊ธฐ๋ง ํ๋ฉด ๋๋ฏ๋ก O(1)์ด ๊ฑธ๋ฆฌ๊ณ
์์๋ฅผ ๊ฒ์ํ ๋๋ ์ํ๋ ๊ฐ์ด ๋์ฌ ๋๊น์ง ๋ง์ง๋ง ์์๋ถํฐ ํ๋์ฉ ์ ๊ฑฐํด๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๊ฒฝ์ฐ O(n)์ด ๊ฑธ๋ฆฐ๋ค.
๐ Stack์ ๊ตฌํ
Stack์ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์๋ค.
1. Array ๊ธฐ๋ฐ
2. Linked List ๊ธฐ๋ฐ
Array์ Linked List ์์ฒด๊ฐ ์ด๋ฏธ ํ๋์ ์๋ฃ๊ตฌ์กฐ์ด์ง๋ง, ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ Stack์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ์ ์๋ ๊ฒ์ด๋ค.
Array๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ ์คํ๊ณผ Linked List ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ ์คํ ๋ชจ๋ ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ด ์๊ณ ์ด๋ Array ์์ฒด์ ์ฅ๋จ์ ๊ณผ Linked List ์์ฒด์ ์ฅ๋จ์ ๊ณผ ๋์ผํ๋ค. (์ฐธ๊ณ : Array vs Linked List)
๐ Stack์ ํ์ฉ
1. ์๋ํฐ, ํฌํ ์ต ๋ฑ์์ ์คํํ ๊ธฐ๋ฅ์ ์ทจ์ํ๋ ๊ฒฝ์ฐ
2. ์น ๋ธ๋ผ์ฐ์ ์ ์์ผ๋ก๊ฐ๊ธฐ ๋ฐ ๋ค๋ก ๊ฐ๊ธฐ ๊ธฐ๋ฅ
3. ํ๋ ธ์ด ํ์, ํธ๋ฆฌ ํ์, ํ์คํ ๊ทธ๋จ ๋ฌธ์ ์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ
4. ๋ฐฑํธ๋ํน(ex. N-Queen, ๋ฏธ๋ก์์ ๊ธธ ์ฐพ๊ธฐ ๋ฑ)
5. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ(์ค๋๋ ์ปดํจํฐ๋ ์คํ ๋ชฉ์ ์ผ๋ก ์คํ์ ๊ธฐ๋ณธ ๊ด๋ฆฌ๋ก ์ฌ์ฉ)
6. ๋ฌธ์์ด ๋ฐ์
๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ ์คํ์ ๋งจ ์๋์ ์๊ณ ๋ฌธ์์ด์ ๋ง์ง๋ง ์์๋ ์คํ์ ๋งจ ์์ ์๋ค. ์คํ์์ pop()์ผ๋ก ์์๋ฅผ ํ๋์ฉ ๊บผ๋ด์ ์ถ๋ ฅํ๋ฉด ๋ฌธ์์ด์ด ์ญ์์ผ๋ก ํ์๋๋ค.
๐ Queue
ํ๋ ๋จผ์ ์ง์ด๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ์ฑ์ง(FIFO, First In First Out)์ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋ง์ง๋ง์ ์ฝ์ ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ์คํ๊ณผ ์ ๋ฐ๋์ ๊ฐ๋ ์ด๋ค.
์ค์ํ์ ์๋ฅผ ๋ค์ด๋ณด์๋ฉด, ๋์ด๊ณต์์ ์ ์ฅํ๊ธฐ ์ํด ์ค์ ์ฐ์ ๋ ๋งจ ์์ ์ฌ๋๋ถํฐ ์ฐจ๋ก๋๋ก ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋ ๊ฒ์ด๋ค.
ํ ์ญ์ ์์๋ฅผ ์ฝ์ ํ ๋๋ ๋ง์ง๋ง ์์น์ ์ง์ด๋ฃ๊ธฐ๋ง ํ๋ฉด ๋๋ฏ๋ก O(1)์ด ๊ฑธ๋ฆฌ๊ณ ,
์์๋ฅผ ๊ฒ์ํ ๋๋ ์ํ๋ ๊ฐ์ด ๋์ฌ ๋๊น์ง ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ํ๋์ฉ ์ ๊ฑฐํด๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๊ฒฝ์ฐ O(n)์ด ๊ฑธ๋ฆฐ๋ค.
๐ Queue์ ๊ตฌํ
ํ์ ๊ตฌํ ๋ฐฉ์๋ ์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๊ฐ์ง๊ฐ ์๋ค.
1. Array ๊ธฐ๋ฐ
2. Linked List ๊ธฐ๋ฐ
๐ Queue์ ์ ํ
ํ์๋ ํฌ๊ฒ 3๊ฐ์ง ์ ํ์ด ์๋ค.
1. Circular Queue(์ํ ํ)
์ ์ ์ ์ถ(First In First Out) ์์น์ ๋ฐ๋ผ ์ฐ์ฐ์ ์ํํ๊ณ ๋ง์ง๋ง ์์น๋ฅผ ๋ค์ ์ฒซ ๋ฒ์งธ ์์น๋ก ์ฐ๊ฒฐํ์ฌ ์์ ๋ง๋๋ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค.
2. Priority Queue(์ฐ์ ์์ ํ)
์ฐ์ ์์ ํ๋ ์์์ ํ ๋น๋ ์ฐ์ ์์์ ๋ฐ๋ผ ์์๊ฐ ์ก์ธ์ค ๋๋ ํน์ํ ํ์ด๋ค.
ํ์ ๋น์ทํ์ง๋ง, ๊ฐ ํ๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ๊ณ ์์ด์ ๋ฌด์กฐ๊ฑด ๋จผ์ ๋ค์ด์๋ค๊ณ ๋จผ์ ์ฒ๋ฆฌ๋๋ ๊ฒ ์๋๋ผ ๋๊ฐ ๋ ์๊ธํ ์ง์ ๋ฐ๋ผ ์ฒ๋ฆฌ๋๋ค.
์ฐ์ ์์ ํ์ ๊ตฌํ ๋ฐฉ๋ฒ์ Array ๊ธฐ๋ฐ, Linked List ๊ธฐ๋ฐ, ๊ทธ๋ฆฌ๊ณ Heap ๊ธฐ๋ฐ ์ด๋ ๊ฒ 3๊ฐ์ง๊ฐ ์๋ค.
Array์ ๋จ์ ์ด ์์๋ฅผ ์ฝ์ /์ญ์ ํ ๋ ๋๋จธ์ง ์์๋ค์ ํ์นธ์ฉ ์ด๋์์ผ์ค์ผ ํ๋ค๋ ๊ฒ์ธ๋ฐ, ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๋ฉด ์ต์ ์ ๊ฒฝ์ฐ(์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ์ ์์๋ฅผ ์ฝ์ ํ๋ ๊ฒฝ์ฐ) ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ์ฐ์ ์์์ ๋ด ์ฐ์ ์์๋ฅผ ํ๋ํ๋ ๋น๊ตํด์ ์๋ฆฌ๋ฅผ ์ฐพ์์ผ ํ๋ค๋ ๋จ์ ์ด ๋ ์๊ธด๋ค.
Linked List๋ ์ด๋จ๊น? ์ฐ์ Linked List์ ๊ฒฝ์ฐ ์์๋ฅผ ์ฝ์ /์ญ์ ํ ๋ ๋๋จธ์ง ์์๋ฅผ ์ด๋์์ผ์ผ ํ๋ ๋ถํธํจ์ ๋ฐ์ํ์ง ์๋๋ค.
ํ์ง๋ง ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ญ์ ์์๋ฅผ ์ฝ์ ํ๋ ๊ณผ์ ์์ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ถํฐ ๋ง์ง๋ง ๋ ธ๋๊น์ง ๋ ธ๋์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ฐ์ ์์์ ๋์ ์ฐ์ ์์๋ฅผ ๋น๊ตํด์ผ๋ง ํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ผ์ ์ฐ์ ์์ ํ๋ Array๋ ์๋, Linked List๋ ์๋, Heap์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
โก๏ธ ํ๋์ ๋น๊ตํ๋ Stack vs Queue
Stack | Queue |
LIFO(Last In First Out) | FIFO(First In First Out) |
์ฝ์ /์ญ์ ๋ ์คํ์ ์ต์์(top)์์๋ง ์ํ๋จ | ์ฝ์
์ ๋ฆฌ์คํธ์ ์ ์ผ ๋ท๋ถ๋ถ(rear)์์ ์ํ. ์ญ์ ๋ ๋ฆฌ์คํธ์ ์ ์ผ ์ฒ์(front)์์ ์ํ |
ํ๋์ ํฌ์ธํฐ ํ์(top) | ๋ ๊ฐ์ ํฌ์ธํฐ ํ์(front / rear) |
์ฃผ๋ก ์ฌ๊ท ๋ฌธ์ ํด๊ฒฐ์ ์ฌ์ฉ | ์ฃผ๋ก ์์ฐจ ์ฒ๋ฆฌ ๋ฌธ์ ํด๊ฒฐ์ ์ฌ์ฉ |
์ ํ ์์ | 3๊ฐ์ ์ ํ(์ํ ํ, ์ฐ์ ์์ ํ, deque) |
์์ง์ | ์ํ์ |
๐ References
introduction-to-stack-data-structure-and-algorithm-tutorials
introduction-to-queue-data-structure-and-algorithm-tutorials
difference-between-stack-and-queue-data-structures
โ์ค์ฑ์ฐ์ ์ดํ ์๋ฃ๊ตฌ์กฐโ
'CS > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Hash Table (0) | 2022.09.30 |
---|---|
Red-Black Tree(RBT) (0) | 2022.09.30 |
Heap(Max Heap, Min Heap) (0) | 2022.09.29 |
Tree(Binary Tree, ํฌํ ์ด์ง ํธ๋ฆฌ, ์์ ์ด์ง ํธ๋ฆฌ, BST) (0) | 2022.09.25 |
Array vs LinkedList (0) | 2022.09.25 |