Stack & Queue

2022. 9. 25. 17:25ยทCS/์ž๋ฃŒ๊ตฌ์กฐ

๐Ÿก 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
'CS/์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Red-Black Tree(RBT)
  • Heap(Max Heap, Min Heap)
  • Tree(Binary Tree, ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ, ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ, BST)
  • Array vs LinkedList
yenim
yenim
    ๋ฐ˜์‘ํ˜•
  • yenim
    FOREST, FOR REST
    yenim
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (234)
      • Android (8)
      • Baekjoon (142)
        • ๊ตฌํ˜„ (3)
        • ๋ธŒ๋ฃจํŠธํฌ์Šค (10)
        • BFS (12)
        • DFS (13)
        • ๋ฐฑํŠธ๋ž˜ํ‚น (3)
        • DP (26)
        • ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ (1)
        • ์ด๋ถ„ ํƒ์ƒ‰ (10)
        • ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (12)
        • ํˆฌํฌ์ธํ„ฐ (2)
        • ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ (2)
        • ๋‹ค์ต์ŠคํŠธ๋ผ (1)
        • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (6)
        • ๋ถ„ํ•  ์ •๋ณต (3)
        • ๋ฌธ์ž์—ด (9)
        • ์ •๋ ฌ (6)
        • ํƒ์ƒ‰ (2)
        • ์ˆ˜ํ•™ (20)
        • ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ (1)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (15)
        • ๊ตฌํ˜„ (4)
        • ๋ธŒ๋ฃจํŠธํฌ์Šค (4)
        • DFS (1)
        • DP (1)
        • HEAP (1)
        • ๋ฌธ์ž์—ด (3)
        • ํ•ด์‹œ (0)
        • ๋น„ํŠธ (1)
      • CS (39)
        • ๊ฐœ๋ฐœ์ƒ์‹ (9)
        • ์ž๋ฃŒ๊ตฌ์กฐ (8)
        • ๋„คํŠธ์›Œํฌ (7)
        • ์šด์˜์ฒด์ œ (5)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (4)
        • ๋””์ž์ธํŒจํ„ด (1)
        • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (5)
      • Programming Languages (3)
        • C & C++ (2)
        • Kotlin (1)
      • ์ทจ์ค€ (7)
      • Git (2)
      • Google Online Challenge (4)
      • ์—๋Ÿฌ ํ•ด๊ฒฐ (6)
      • WEB (0)
      • NOTE (3)
      • DIARY (3)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๐Ÿก HOME
    • โœ๏ธ TIL
  • ๋งํฌ

    • github
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ทธ๋ž˜ํ”„
    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    BFS
    ์ฝ”ํ…Œ
    ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰
    DFS
    ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰
    DP
    ๋ฌธ์ž์—ด
    ๋ฐฑ์ค€
    CS
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ๋ช…ํ’ˆ ์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.4
yenim
Stack & Queue
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”