ЁЯеЮ рдзрдбрд╛ 04 тАФ Stacks рдЖрдгрд┐ queues: рдЯреНрд░реЗрдЪреА рдЪрд│рдд рдЖрдгрд┐ рдЬреЗрд╡рдгрд╛рдЪреА рд░рд╛рдВрдЧ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 04 ┬╖ рдкреБрдвреЗ: lesson-05-hash-maps
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ04. рддреБрдореНрд╣реА рдХреЛрдгрддреЗ рдЯреЛрдХ рд╡рд╛рдкрд░рддрд╛ рдпрд╛рд╡рд░реВрди рдард░рдгрд╛рд░реЗ рджреЛрди containers, рдПрдХрд╛ рдУрд│реАрдЪрд╛ bracket checker, рдЖрдгрд┐ рд╕рд░рдХрд╡рд╛рд╕рд░рдХрд╡реА рди рдХрд░рдгрд╛рд░реА queue.
- dsa/structures.py тАФ list рд╡рд░
Stack; ring buffer рдореНрд╣рдгреВрдиQueue, рдЬреА рднрд░рд▓реА рдХреА рджреБрдкреНрдкрдЯ рд╣реЛрддреЗ - dsa/demo.py тАФ
stackqueue: рдЯреНрд░реЗ, рдЬреЗрд╡рдгрд╛рдЪреА рд░рд╛рдВрдЧ, balanced brackets
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдХреЕрдиреНрдЯреАрдирдордзреНрдпреЗ рд╕реНрд╡рдЪреНрдЫ рдЯреНрд░реЗ рдПрдХрд╛ рдЪрд│рддреАрд╡рд░ рдареЗрд╡рддрд╛рдд: рд╢реЗрд╡рдЯреА рдареЗрд╡рд▓реЗрд▓рд╛ рдЯреНрд░реЗ рдЖрдзреА рдЙрдЪрд▓рд▓рд╛ рдЬрд╛рддреЛ (LIFO). рд╡рд┐рджреНрдпрд╛рд░реНрдереА рд░рд╛рдВрдЧреЗрдд рдерд╛рдВрдмрддрд╛рдд: рдЖрдзреА рдЖрд▓реЗрд▓реНрдпрд╛рд▓рд╛ рдЖрдзреА рдЬреЗрд╡рдг рдорд┐рд│рддреЗ (FIFO). рджреЛрдиреНрд╣реА рдЕрд╢рд╛ lists рдЖрд╣реЗрдд рдЬрд┐рдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдПрдХрдЪ рдЯреЛрдХ рд╣рд╛рддрд╛рд│рд╛рдпрдЪреА рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ тАФ рдЖрдгрд┐ рд╣реЗ рдмрдВрдзрдирдЪ рддреНрдпрд╛рдВрдирд╛ рдЙрдкрдпреЛрдЧреА рдмрдирд╡рддреЗ: undo, brackets рдЖрдгрд┐ call stack рдпрд╛ рдЪрд│рддреА рдЖрд╣реЗрдд; printing, tasks рдЖрдгрд┐ breadth-first search рдпрд╛ рд░рд╛рдВрдЧрд╛ рдЖрд╣реЗрдд.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
subgraph stack["ЁЯеЮ stack (LIFO)"]
T3["tray 3 тЖР top"] --- T2["tray 2"] --- T1["tray 1"]
end
subgraph queue["ЁЯН╜я╕П queue (FIFO)"]
F["front: Aishwarya"] --- Q2["Katrina"] --- B["back: Dipika"]
end
тЭУ рдХрд╛рдп
- Stack: push, pop, peek тАФ рд╕рдЧрд│реЗ O(1). Python list рд╣рд╛рдЪ stack рдЖрд╣реЗ
(
append/pop). рдЙрдкрдпреЛрдЧ: balanced brackets, undo/redo, back button, DFS, call stack (рдзрдбрд╛ 06). - Queue: рдорд╛рдЧреЗ enqueue, рдкреБрдвреВрди dequeue.
list.pop(0)O(n) рдЖрд╣реЗ (рд╕рдЧрд│реЗ рд╕рд░рдХрддрд╛рдд). ring buffer рдПрдХ head index рдареЗрд╡рддреЛ рдЖрдгрд┐ рдЧреЛрд▓ рдлрд┐рд░реВрди рдкрд░рдд рдпреЗрддреЛ: O(1). рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛рдорд╛рддcollections.dequeрд╣реЗ рд╕рд╛рдзрди. рдЙрдкрдпреЛрдЧ: BFS (рдзрдбрд╛ 10), job queues, rate limiters, API school рдЪреА рдЬреЗрд╡рдгрд╛рдЪреА рд░рд╛рдВрдЧ. - рдкреНрд░рдХрд╛рд░: deque (рджреЛрдиреНрд╣реА рдЯреЛрдХреЗ), priority queue (рдзрдбрд╛ 09 рдЪрд╛ heap).
ЁЯдФ рдХрд╛
stack рд╡рд╛рдкрд░реВрди bracket checker рд╕рд╣рд╛ рдУрд│реАрдВрдЪрд╛ рд╣реЛрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рд╢рд┐рд╡рд╛рдп рдЬрд╡рд│рдЬрд╡рд│ рдЕрд╢рдХреНрдп;
queue рд╢рд┐рд╡рд╛рдп BFS рдЪреА рдХрд▓реНрдкрдирд╛рдЪ рдХрд░рддрд╛ рдпреЗрдд рдирд╛рд╣реА. list.pop(0) рдордзрд▓рд╛ O(n) рд╕рд╛рдкрд│рд╛
рдорд╛рд╣реАрдд рдЕрд╕рд▓рд╛ рддрд░ рдПрдХ рдЦрд░рд╛ outage рд╡рд╛рдЪрддреЛ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
Queue items рдПрдХрд╛ рдард░рд▓реЗрд▓реНрдпрд╛ list рдордзреНрдпреЗ head рдЖрдгрд┐ n рд╕рд╣ рдареЗрд╡рддреЗ; dequeue head рд▓рд╛
capacity рдЪреНрдпрд╛ modulo рдиреЗ рдкреБрдвреЗ рд╕рд░рдХрд╡рддреЛ; рднрд░рд▓реА рдХреА _grow рджреБрдкреНрдкрдЯ рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ list рдордзреНрдпреЗ
copy рдХрд░рддреЛ. demo.py stackqueue bracket checker рдПрдХрд╛ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдЖрдгрд┐ рдПрдХрд╛ рд╡рд╛рдИрдЯ
string рд╡рд░ рдЪрд╛рд▓рд╡рддреЛ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 dsa/demo.py stackqueue
python3 - <<'EOF'
import time
from collections import deque
n = 200_000
lst = list(range(n)); t = time.perf_counter()
while lst: lst.pop(0) # the trap
print(f"list.pop(0) ├Ч {n}: {(time.perf_counter() - t) * 1000:.0f} ms")
dq = deque(range(n)); t = time.perf_counter()
while dq: dq.popleft()
print(f"deque.popleft() ├Ч {n}: {(time.perf_counter() - t) * 1000:.0f} ms")
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
рдЪрд│рддреАрд╡рд░реВрди tray 3, tray 2; рд░рд╛рдВрдЧреЗрддреВрди Aishwarya, Katrina рдпрд╛рдВрдирд╛ рдЬреЗрд╡рдг;
brackets рд╕рд╛рдареА рдЖрдзреА True рдордЧ False. list.pop(0) loop рд╕реЗрдХрдВрдж рдШреЗрддреЛ;
deque milliseconds рдШреЗрддреЗ тАФ O(n┬▓) рд╡рд┐рд░реБрджреНрдз O(n).
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
list рд▓рд╛ рдПрдХрд╛рдЪ рдЯреЛрдХрд╛рдкреБрд░рддреЗ рдмрд╛рдВрдзрд▓реЗ рдХреА рджреЛрди structures рдорд┐рд│рддрд╛рдд, рдЖрдгрд┐ рддреНрдпрд╛рдВрдкреИрдХреА рдПрдХрд╛рд▓рд╛ рджрд┐рд▓реЗрд▓реЗ рд╡рдЪрди рдкрд╛рд│рд╛рдпрд▓рд╛ ring buffer (рдХрд┐рдВрд╡рд╛ deque) рд▓рд╛рдЧрддреЛ тАФ рдЖрдгрд┐ рддреБрдореНрд╣реА рддреЛ рд╕рд╛рдкрд│рд╛ рдореЛрдЬрд▓рд╛рдд.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- queue рд╕рд╛рдареА
list.pop(0). - pop рдХрд░рдгреНрдпрд╛рдЖрдзреА "stack рд░рд┐рдХрд╛рдорд╛ рдЖрд╣реЗ рдХрд╛?" рд╣реЗ рддрдкрд╛рд╕рд╛рдпрд▓рд╛ рд╡рд┐рд╕рд░рдгреЗ (unbalanced
)рдЪреЗ рдЙрджрд╛рд╣рд░рдг). - рдЬрд┐рдереЗ explicit stack рдиреЗ depth limit рдЯрд╛рд│рддрд╛ рдЖрд▓рд╛ рдЕрд╕рддрд╛ рддрд┐рдереЗ recursion рд╡рд╛рдкрд░рдгреЗ (рдзрдбрд╛ 06).
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: message queues, undo stacks, request pipelines, event loop тАФ рдкреНрд░рддреНрдпреЗрдХ рдореНрд╣рдгрдЬреЗ рдирд╛рд╡ рджрд┐рд▓реЗрд▓рд╛ stack рдХрд┐рдВрд╡рд╛ queue. network cards рдЖрдгрд┐ logging libraries рд╕рд░рдХрд╡рд╛рд╕рд░рдХрд╡реА рдЯрд╛рд│рд╛рдпрд▓рд╛ ring buffer рд╡рд╛рдкрд░рддрд╛рдд.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 05 тАФ hash maps рдЖрдгрд┐ sets: рдирд╛рд╡рд╛рдиреБрд╕рд╛рд░ рдХрдкреНрдкреЗ, рднрд╛рд╖реЗрддрд▓рд╛ рд╕рд░реНрд╡рд╛рдд рдЙрдкрдпреЛрдЧреА structure.