3κ°. μ€ν
1. μ€νμ κ°λ
- TOP : μ€νμμ κ°μ₯ μ΅κ·Όμ μ½μ λ μλ£μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ§μΉ
- push : μ€νμ μλ£ νλλ₯Ό μ½μ νλ ν¨μ. μ€νμ μ μ₯곡κ°μ΄ μΆ©λΆνμ§ νμΈν΄μΌ νλ€.
- pop : μ€νμ μ΅μλ¨ μλ£νμ λ°ν(μ κ±°) νλ ν¨μ. μ€νμ λ°μ΄ν°κ° μ‘΄μ¬νλμ§ νμΈν΄μΌ νλ€.
2. μ€νμ μΆμ μλ£ν
- Stack CreateS(maxStackSize)
- μ€νμ ν¬κΈ°κ° maxStackSizeμΈ λΉ μ€νμ μμ±νκ³ λ°ννλ€.
- Boolean IsFull(stack, maxStackSize)
- μ€νμ΄ κ°λ μ°Όλμ§ μ¬λΆλ₯Ό νμΈνμ¬ λ°ννλ€.
- Stack Push(stack, item)
- μ€νμ΄ κ°λ μ°¨μ§ μμλ€λ©΄ μ΅μλ¨ λ©λͺ¨λ¦¬μ λ°μ΄ν°λ₯Ό μ½μ νλ€.
- Boolean IsEmpty(stack)
- μ€νμ μλ£κ° νλλ μ‘΄μ¬νμ§ μλμ§ μ¬λΆλ₯Ό νμΈνμ¬ λ°ννλ€.
- Element Pop(stack)
- μ€νμ΄ λΉμ΄μλμ§ νμΈν λ€ κ·Έλ μ§ μλ€λ©΄ μ΅μλ¨μ μλ£λ₯Ό κΊΌλ΄ μμ νκ³ λ°ννλ€.
3. μ€νμ μμ©
- μμ€ν μ€ν(system stack)
- λ³μμ μλͺ μ£ΌκΈ° κ΄λ¦¬λ₯Ό μν΄ μ¬μ©
- μλΈλ£¨ν΄ νΈμΆ(subroutine call)
- μλΈλ£¨ν΄μ μνμ΄ λλ ν λλμκ° ν¨μ μ£Όμλ₯Ό μ μ₯νκΈ° μν΄ μ¬μ©
- μμ κ³μ°(evaluation of expression)
- μ°μ°μλ€ κ°μ μ°μ μμμ μν΄ κ³μ° μμλ₯Ό κ²°μ
- μΈν°λ½νΈ(interrupt) μ²λ¦¬μ μ²λ¦¬ ν λλμκ° λͺ λ Ή μνμ§μ μ μ₯
- μ»΄νμΌλ¬μ λ¬Έλ² κ²μ¬, μν νΈμΆ λ±…
4. μ€νμ μ°μ°
μ§μ ꡬνμΌλ‘ μ 리
5. λ°°μ΄μ μ΄μ©ν μ€νμ ꡬν
μ§μ ꡬνμΌλ‘ μ 리
νμ΄μ¬μ μ΄μ©ν μ€ν ꡬν
class Stack: # μ€ν λ©λͺ¨λ¦¬λ₯Ό μ μ₯ν λ³μ # μμ±κ³Ό λμμ μ΄κΈ°ν λ¨. μΈλΆμμ μ κ·Όνμ§ λͺ»νλλ‘ private νκ² μ μΈν΄μΌ ν¨. # λ©€λ² λ³μ μμ '__'λ₯Ό λΆμ΄λ©΄ μΈλΆμμ μ κ·Όν μ μμ __node = None # μ€ν μ΅μλ¨ μΈλ±μ€λ₯Ό κ°λ₯΄ν€λ ν¨μ # None μΌλ‘ μ μΈν μ μ¦κ°μ°μ°μμμ μλ¬κ° λλ―λ‘ -1λ‘ μ μΈ top = -1 # μ€ν μ΅λ μ μ₯κ³΅κ° max_stack_size = 0 # μ€ν κ°μ²΄ μ΄κΈ°νμ λμμ μ μΈ def __init__(self, max_stack_size_p): self.__node = list() self.max_stack_size = max_stack_size_p # μ€νμ΄ κ°λ μ°Όλμ§ νμΈνλ ν¨μ # μ€νμ μ΅μλ¨μ μ£Όμκ° κ°λ₯΄ν€λ κ°μ΄ μ€νμ λ©λͺ¨λ¦¬ μ΅λκ° μ£Όμμ μΌμΉν λ # is_full True λ₯Ό 리ν΄νλ€. def is_full(self): if self.top == self.max_stack_size - 1: return True else: return False # μ€νμ object λ₯Ό νλ λ°μ΄λ£λ ν¨μ # μ€νμ 곡κ°μ΄ μλ€λ©΄ μμλ₯Ό νλ μΆκ°νκ³ κ·Έλ μ§ μλ€λ©΄ λ°νν¨ def push(self, item): if self.is_full(): print('this stack is full') else: self.__node.append(item) self.top += 1 return self # μ€νμ μλ£κ° μ‘΄μ¬νλμ§ νμΈνλ ν¨μ # μλ£κ° μλ€λ©΄ true λ₯Ό λ°ννκ³ κ·Έλ μ§ μλ€λ©΄ false λ₯Ό λ°νν¨ def is_empty(self): if self.top < 0: return True else: return False # μ€ν λ©λͺ¨λ¦¬ μ΅μλ¨ μλ£λ₯Ό μμ νκ³ λ°ννλ ν¨μ # μ€νμ΄ λΉμ΄μμ§ μλ€λ©΄ μ€ν κ°λ₯ def pop(self): if self.is_empty(): print('this stack is empty') else: self.top -= 1 return self.__node.pop()
6. μ¬μΉμ°μ°μμ μ€μ/νμ/μ€μ νν
6.1 μ μ νκΈ°λ²
μ°μ°μλ₯Ό νΌμ°μ°μ μμ κ°μ Έλ€ λλ λ°©λ² ex) 'A+B' → '+AB'
μ€νμ μ¬μ©νμ¬ μ²λ¦¬νκΈ° μλΉν 볡μ‘ν¨. μ¬λμ΄ νλκ² λ λΉ λ¦
6.2 νμ νκΈ°λ²
A + Bλ₯Ό AB+ μ κ°μ΄ νννλ κΈ°λ². μ»΄ν¨ν°κ° ν΄μνκΈ° μ’μ
ex) E + (A - B) * C/D → E(((AB-)C*)D/)+
'λ ΈνΈ > μλ£κ΅¬μ‘°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ£κ΅¬μ‘°] 6. μ°κ²°λ¦¬μ€νΈμ μμ© (0) | 2022.01.27 |
---|---|
[μλ£κ΅¬μ‘°] 5. μ°κ²° 리μ€νΈ (0) | 2022.01.06 |
[μλ£κ΅¬μ‘°] 4. ν (0) | 2022.01.06 |
[μλ£κ΅¬μ‘°] 2. λ°°μ΄ (0) | 2021.12.20 |
[μλ£κ΅¬μ‘°] 1. μλ£κ΅¬μ‘°λ 무μμΈκ° (0) | 2021.12.20 |