π§βοΈstack / queue / deque λͺ¨λ νΉμ μμΉμμλ§ μμλ₯Ό λ£κ±°λ λΊ μ μλ restricted structure
1. stack
π§βοΈ μ€νμ΄λ, ν μͺ½μΌλ‘λ§ λ°μ΄ν°λ₯Ό λΉΌκ³ λ£μ μ μλ μλ£κ΅¬μ‘°λ‘, ν μͺ½λ§ ꡬλ©μ΄ λ«λ € μλ νλ§κΈμ€ ν΅μ μκ°νλ©΄ λλ€. λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°κ° λμ€μ λκ°λ νμ - μ¦ λμ€μ λ€μ΄μ¨ λ°μ΄ν°κ° λ¨Όμ λκ°λ νμ(μ μ νμΆ FILO)μ μλ£κ΅¬μ‘°. μ ꡬμ μΆκ΅¬κ° λμΌν ννλ‘ λ§€μ° κ°λ¨ν λ μ°μ°(μμ μΆκ° O(1), μμ μ κ±° O(1))μ΄ μ 곡λλ€. μ μΌ μλ¨μ μμ νμΈμ O(1), μ μΌ μλ¨μ΄ μλ λλ¨Έμ§ μμλ€μ νμΈ/λ³κ²½μ μμΉμ μΌλ‘ λΆκ°λ₯νλ€. νμ μ€ν μλ¨μλ§ μ΄μ μ΄ λμ΄ μμ. λ°λΌμ μ½μ ν λμλ κ°μ₯ μ΅κ·Όμ μ½μ ν μμ λ°λ‘ μμ μ½μ μ΄ λκ³ , μμ ν λλ κ°μ₯ μ΅κ·Όμ μ½μ ν μμκ° μμ λλ€. λ°λΌμ μ€νμ μ μΌ μλ¨μ μμ μΆκ° & μ μΌ μλ¨ μμ μ κ±° & μ μΌ μλ¨ μμ νμΈ - μ΄λ κ² 3κ°μ§ μ°μ°μ΄ μ£Όκ° λλ€. λ°λΌμ μ€ν νμ© λ¬Έμ λ μ μΌ μλ¨μ΄ μλ λλ¨Έμ§ μμλ€μ νμΈ/λ³κ²½μ νμ x.
π§βοΈ pythonμΌλ‘μ ꡬνμ listλ₯Ό νμ©ν΄μ κ°λ₯. μ μΌ μλ¨μ listμ μ€λ₯Έμͺ½ λμ΄λΌ λ³΄κ³ , μ μΌ μλ¨μ μμ μΆκ°λ append(), μ μΌ μλ¨ μμ μ κ±°λ pop(), μ μΌ μλ¨ μμ νμΈμ arr[-1]μ νμ©ν΄μ κ°λ₯ - λͺ¨λ μκ°λ³΅μ‘λ O(1)λ‘ λ§€μ° λΉ λ₯Έ μκ° λ΄μ operation μν κ°λ₯. μλ₯Ό λ€μ΄ μ½μ 5 - μ½μ 2 - μ½μ 3 - μ½μ 7 - μμ - μ½μ 1 - μ½μ 4 - μμ μμΌλ‘ stack μ°μ°μ ꡬννλ€λ©΄ μλμ κ°λ€.
stack = []
stack.append(5)
stack.append(2)
stack.append(3)
stack.append(7)
stack.pop()
stack.append(1)
stack.append(4)
stack.pop()
print(stack[::-1]) #print from the topmost [1, 3, 2, 5]
print(stack) #print from the bottommost [5, 2, 3, 1]
2. queue
π§βοΈ ν(queue)λ μ€νκ³Ό λ€λ₯΄κ² λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°κ° λ¨Όμ λκ°λ νμ(μ μ μ μΆ FIFO)μ μλ£κ΅¬μ‘°μ΄λ€. μ΄λ μ ꡬμ μΆκ΅¬κ° λͺ¨λ λ«λ € μλ ν°λκ³Ό κ°μ ννλ‘ μλμ κ°μ΄ μκ°νν μ μλ€. μλ₯Ό λ€μ΄ λ¨Όμ λ€μ΄μ¨ μ¬λμ΄ λ¨Όμ μ²λ¦¬λλ λκΈ°μ΄μ ꡬνν λ νλΌλ μλ£κ΅¬μ‘°λ₯Ό μ¬μ©ν μ μλ€. νμͺ½ λμμ μμλ₯Ό λ£κ³ λ°λμͺ½ λμμ μμλ₯Ό λΊ μ μλ μλ£κ΅¬μ‘°. ν μͺ½ μμ μΆκ° O(1), κ·Έ λ°λμͺ½ μμ μ κ±° O(1), λν μ μΌ μκ³Ό λ€ μμ κ°κ° νμΈμ O(1)μ΄λ©° μ μΌ μ/λ€κ° μλ λλ¨Έμ§ μμλ€μ νμΈ/λ³κ²½μ μμΉμ μΌλ‘ λΆκ°λ₯νλ€. μ€νκ³Ό λ€λ₯΄κ² λκ°κ³ λ€μ΄μ€λ μ ꡬ/μΆκ΅¬κ° λ€λ₯΄μ§λ§, 곡ν΅μ μ λͺ¨λ μΆ/μ κ΄λ ¨ μλ μμλ€μ νμΈ/λ³κ²½μ λΆκ°λ₯νλ€λ μ .
π§βοΈ pythonμΌλ‘μ ꡬνμ collections λͺ¨λμ deque() ν¨μλ₯Ό νμ©ν΄μ κ°λ₯. μ€λ₯Έμͺ½ λ€μͺ½μμ μμλ₯Ό λ£μ λλ append(), μΌμͺ½ μμͺ½μμ μμλ₯Ό λΊ λλ popleft()(κ·Έ λ°λλ‘ μμͺ½μμ μμλ₯Ό λ£κ³ μΆλ€λ©΄ appendleft(), μ€λ₯Έμͺ½ λ€μͺ½μμ μμλ₯Ό λΉΌκ³ μΆλ€λ©΄ pop() μ¬μ© κ°λ₯. λ€λ§, queueλ λ€μ΄μ€κ³ λκ°λ λ°©ν₯μ νμ΄νκ° λμΌνλ€λ μ ) append(), appendleft(), pop(), popleft() λͺ¨λ μκ°λ³΅μ‘λ O(1). μλ₯Ό λ€μ΄ μ½μ 1 - μ½μ 2 - λΉΌκΈ° 1 - λΉΌκΈ° 2 - μ½μ 3 - μ½μ 4 - μ½μ 5 μμλ μλμ κ°μ΄ μ½λλ‘ κ΅¬νν μ μλ€.
from collections import deque
queue = deque()
queue.appendleft(1)
queue.appendleft(2)
queue.pop()
queue.pop()
queue.appendleft(3)
queue.appendleft(4)
queue.appendleft(5)
print(queue) #deque([5, 4, 3])
3. deque
π§βοΈ λ±(deque)μ΄λ, νμ λ€λ₯΄κ² μμͺ½ λμμ μ½μ κ³Ό μμ κ° μ λΆ κ°λ₯ν μλ£κ΅¬μ‘°. Double-Ended queueμ μ€μλ§. μμμ μΆκ° / μ κ±° λͺ¨λ O(1), μ μΌ μ/λ€μ μμ νμΈμ O(1), μ μΌ μ/λ€κ° μλ λͺ¨λ μμλ μμΉμ μΌλ‘ λ³κ²½/μ κ·Ό λΆκ°λ₯. μ΄ λ queueμ λ€λ₯Έ μ μ μμͺ½ λ λͺ¨λμμ μμ λ‘κ² λ£κ³ λΊ μ μλ€λ μ .
π§βοΈ pythonμΌλ‘μ ꡬνμ μ queueμ λ§μ°¬κ°μ§λ‘ collectionsμ deque() νμ©. μ queue()μ λμΌνκ² append(), appendleft(), pop(), popleft() μ¬μ© κ°λ₯νλ€. νμ listμ ν¨μλ‘ λ§μ΄ μ°λ index(), insert(), remove(), count(), reverse() μ¬μ© κ°λ₯. 1κ°κ° μλ 2κ° μ΄μμ μμλ₯Ό λμμ λ£λ extend(), extendleft()λ μ¬μ© κ°λ₯νλ©° μ§μ ν μΉΈ λ§νΌ μμ§μ΄λ rotate() ν¨μλ μλ€. μλ₯Ό λ€μ΄ deque([1, 2, 3, 4, 5])κ° μλ€λ©΄ rotate(2)λ₯Ό ν κ²½μ° μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ 2μΉΈ μμ§μ΄κ³ μ€λ₯Έμͺ½μμ λΉ μ§ μμλ λμμ μΌμͺ½μΌλ‘ λ€μ΄κ°λ€. deque([5, 4, 1, 2, 3])μ΄ λλ€. λ°λ λ°©ν₯μ rotate(-2)μ΄κ³ μκ° λ³΅μ‘λλ O(k) (kκ°μ μμ μμ§μΈλ€λ©΄) μλ₯Ό λ€μ΄ 86κ³Ό 23, 17μ μ°¨λ‘λλ‘ μΌμͺ½μ λ£κ³ , μ€λ₯Έμͺ½μμ 86μ λΊ λ€ μ€λ₯Έμͺ½μμ 30μ λ£κ³ μΌμͺ½μμ 17μ λΉΌλ κ³Όμ μ μλμ κ°μ΄ μ½λλ‘ κ΅¬νν μ μλ€.
from collections import deque
deque = deque()
deque.appendleft(86)
deque.appendleft(23)
deque.appendleft(17)
deque.pop()
deque.append(30)
deque.popleft()
print(deque) #deque([23, 30])
π§βοΈ arrayμ dequeμ λΉκ΅νμλ©΄ arrayλ μ€κ°μ μλ λͺ¨λ μμλ€λ O(1)μ λλ€ μ κ·Ό κ°λ₯. νμ§λ§ dequeμ μ λμ μμ 1κ°μ©μ deletion, insertionμ΄ O(1)μΈ μλ£κ΅¬μ‘°(νμ§λ§ arrayλ μ½μ κ³Ό λΉΌλ΄κΈ° μ°μ° λͺ¨λ O(n)). νμ§λ§ dequeμ νΉμ μμ μ κ·Όμ O(n). λ°λΌμ dequeμ, dequeμ μ΄λ€ μμκ° λ€μ΄κ°λμ§ μκ΄νμ§ μκ³ νΉμ μμλλ‘ λ°μ΄ν°λ₯Ό μ§μ΄λ£κ³ λΉΌλ΄λ μ°μ°μ μν λ λ§μ΄ μ°μ.
μ΄μ½ν 2021
BaaarkingDog
'Computer Science > Data Structures' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
set() & dict() - μ§ν©κ³Ό 맡 (0) | 2023.08.03 |
---|---|
Binary heap (0) | 2023.02.06 |
Types of Binary Treeπ² (0) | 2023.01.10 |
priority queue(binary heap) (0) | 2023.01.09 |
hash table / hashing (0) | 2022.11.06 |
λκΈ