β 1. μ€νμ κ°λ
(1) μ€νμ μ μ
- κ°μ²΄μ κ·Έ κ°μ²΄κ° μ μ₯λλ μμλ₯Ό κΈ°μ΅νλ λ°©λ²μ κ΄ν μλ£κ΅¬μ‘°μ΄λ€.
- κ°μ₯ λ¨Όμ μ λ ₯λ μλ£κ° κ°μ₯ λμ€μ μΆλ ₯λλ κ΄κ³λ₯Ό ννν¨
- μ½κ²λ§ν΄, μ€νμ νμ μ μΆλ‘μ¨ κ°μ₯ λμ€μ λ£μ κ°μ²΄κ° κ°μ₯ λ¨Όμ λμ¨λ€.
- μ΄λ¬ν μΆμ μλ£νμ ꡬννλ €λ©΄ ꡬνκ³Όμ μμ μ μ₯λλ μμλ₯Ό κΈ°μ΅ν΄μ€μΌ νλ€λ μλ―Έμ΄λ€.
- κ΄κ³λ₯Ό νννκΈ° μν΄μ μ°μ°μ΄ νμνλ©°, κ°μ²΄μ λν μ μμ μ°μ°μ΄ λͺ¨μ¬μ μμκ° κΈ°μ΅λλ μ€νμ μΆμ μλ£νμ΄ μμ±λ¨
- μ½κ²λ§ν΄, μλ£ κ΅¬μ‘°μμ λ°μ΄ν°λ₯Ό λ¨μν μ μ₯νλ κ²λΏλ§ μλλΌ, λ°μ΄ν°λ₯Ό λ€λ£¨λ μ°μ°μ΄ μ€μνλ©° μ€ν(abstract data type, ADT)μ **λ°μ΄ν°(κ°μ²΄) + μ°μ°(push, pop λ±)**μ΄ λͺ¨μ¬ λ§λ€μ΄μ§κ³ μ€νμ νμ μ μΆ(LIFO) μμλ₯Ό μ μ§νλ€λ νΉμ±μ κ°μ§λ€λ μλ―Έμ΄λ€.
- 0κ° μ΄μμ μμλ₯Ό κ°λ μ ν μμ 리μ€νΈμ΄λ€.
- push(add)μ pop(delete)μ°μ°μ΄ νκ³³μμ λ°μλλ μλ£κ΅¬μ‘°μ΄λ€.
β 2. μ€νμ μΆμ μλ£ν
(1) μ€νμ μΆμμλ£ν
- μ€ν κ°μ³¬: 0κ° μ΄μμ μμλ₯Ό κ°λ μ ν μμ 리μ€νΈ
(2) CreateStack μ°μ° ( Stack μΆμ μλ£ν )
- Stack μλ£κ΅¬μ‘°μ μΆμ μλ£νμΌλ‘, CreateStack μ°μ°μ λν μ μμ΄λ€.
(3) Push μ°μ°
- μ€νμ Push μ°μ°μ κ°μ₯ μμ λ°μ΄ν°λ₯Ό μ½μ νκ³ , ν΄λΉ μ€νμ λ°νμ ν΄μ€λ€.
- ν΄λΉ λΆλΆμ Stack μ Push μ°μ°μ λν μ μμΈ μΆμ μλ£νμ΄λ€.
(4) Pop μ°μ°
- κ°μ₯ μμ μλ μμλ₯Ό μμ νκ³ λ°νμ ν΄μ£Όλ μ°μ°μ μλ―Ένλ€.
(5) μ 리
- μ€νμ λ©λͺ¨λ¦¬μ μμ λ‘μ΄ μ¬μ©(무μμ μ κ·Ό)μ μ΅μ νκ³ , λ°μ΄ν°λ₯Ό μΌμ ν κ·μΉ(LIFO)μΌλ‘λ§ μ κ·Όνλλ‘ κ΅¬μ‘°νν¨μΌλ‘μ¨ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μκ² λ§λ μλ£κ΅¬μ‘°μ΄λ€. μ¦, κ·μΉμ λ§λ¦μΌλ‘μ¨ μ νμ λλ€λ κ²μ΄ ν΅μ¬μ΄λ€.
- ν λ§λλ‘, μ€νμ μμ λ₯Ό μ νν΄ μμ 보μ₯κ³Ό ν¨μ¨μ μ»λ μλ£κ΅¬μ‘°λ‘ μ΄ν΄ ν μ μμ.
- μ€νμ κΈ°λ³Έμ μΌλ‘ push(μ½μ ), pop(μμ ), peek(맨 μ κ° νμΈ) μ΄ μΈ κ°μ§ μ°μ°λ§ μ 곡νλ€.
- κ·Έ μΈ μμμ μμΉμ μ κ·Όνκ±°λ μ€κ° λ°μ΄ν°λ₯Ό μμ νλ κ²μ νμ©λμ§ μμ
- μ΄λ¬ν μ ν λλ¬Έμ λ©λͺ¨λ¦¬ κ΄λ¦¬κ° κ°λ¨ν΄μ§κ³ , μ°μ°λ ν¨μ¨μ μ΄κ² λ¨. ( μ¦, μ νμ μλ£κ΅¬μ‘°μ ν΅μ¬μΈ κ²μ΄λ€. )
- λ°μ΄ν°λ€ μ¬μ΄μ κ΄κ³λ₯Ό ꡬ쑰ννκ²μ΄ μλ£κ΅¬μ‘°μ΄λ©°, μΆμ μλ£νμ ν΅ν΄μ λ°μ΄ν°λ€μ μ¬μ΄μ κ΄κ³λ₯Ό μ μνκ³ μλ€.
(6) Pop/Push μ°μ°μ μ€ν
- 1. CreateStack(3): μ μΌ μ΄κΈ°μνλ‘ 3κ°μ 곡κ°μ κ°μ§λ Stack μ΄ λ§λ€μ΄μ§.
- 2. Push(stack, 'S'): μ μΌ μ²« λ²μ§Έ μμΉμ 'S' λ°μ΄ν°κ° λ€μ΄κ°κ² λλ€.
- 3. Push(stack, 'T'): λ λ²μ§Έ μμΉμ λ€μ΄κ°κ² λλ€.
- 4. Pop(stack): μ μΌ λ§μ§λ§ μμΉ μ¦, topμ μμΉμ μλ 'T' μ κ°μ΄ μμ λλ©΄μ 'T' λ°μ΄ν°λ₯Ό λ°νλ°λλ€.
- 5. Push(stack, R): ν΄λΉ stack top μ 'R' μ½μ
- 6. Push(stack, 'P'): 'P' μ½μ ( μ΄ λΆλΆμμ Stack μ 곡κ°μΈ 3μΉΈμ΄ λ€ μ°¨λ²λ¦Ό. )
- 7. Push(stack, 'Q'): Qλ μ½μ μ΄ λμ§μλλ€. μ΄μ λ, μΆμ μλ£ν μ€κ³ μ¦, ADT μ€κ³μ μν μ μ½μΌλ‘ λ§ν.
- μ€κ³μμ μμ μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ 미리 ν¬κΈ°λ₯Ό μ ν΄λμΌλ©΄ ν λΉμ΄ ν λ²μ λλλ―λ‘ λ©λͺ¨λ¦¬ κ΄λ¦¬μ ν¨μ¨μ μ΄λΌμ
- μ€νμ΄ LIFO κ΅¬μ‘°λ‘ λμνλ€λ κ²μ μ νλ μ°μ° κ·μΉμ κ°λ λ»μ΄λ©°, λ§μ½ μ ν μμ΄ κ³μ λμ΄λλ€λ©΄, νλ‘κ·Έλ¨μμ μκΈ°μΉ λͺ»ν λ©λͺ¨λ¦¬ μ¬μ© μ¦κ° μ¦, 무ν μ€νμΌλ‘ μΈν΄ μμ€ν μ΄ λΆμμ ν΄μ§ μ μκΈ° λλ¬Έμ.
- κ²°κ³Όμ μΌλ‘ Stack μμλ StackIsFull / StackIsEmpty μ κ°μ μ°μ°μ ν΅ν΄ μμ μ±μ ν보νκ³ μμ.
(7) StackIsFull / StackIsEmpty μ°μ°
- StackIsFull: μ€νμ΄ λ―Έλ¦¬ μ ν΄μ§ μ΅λ ν¬κΈ°κΉμ§ λ°μ΄ν°λ₯Ό μ±μ΄ μνμμ Push λ₯Ό μλν λ λΆλ¦¬μΈ κ° λ¦¬ν΄
- StackIsEmpty: μ€νμ λ°μ΄ν°κ° νλλ μλ μνμμ Pop μ΄λ Peek λ₯Ό μλν λ λΆλ¦¬μΈ κ° λ¦¬ν΄
β 3. μ€νμ μμ©
(1) μ€νμ λ€μν μμ©
- λ³μμ λν λ©λͺ¨λ¦¬μ ν λΉκ³Ό μμ§μ μν μμ€ν μ€ν
- μλΈλ£¨ν΄ νΈμΆ κ΄λ¦¬λ₯Ό μν μ€ν: ν¨μ νΈμΆ μ λ°ν μ£Όμλ₯Ό μ€νμ μ μ₯(push)νκ³ , ν¨μκ° λλλ©΄ μ€νμμ κΊΌλ΄(pop) ν΄λΉ μμΉλ‘ λμκ° μ€νμ μ΄μ΄κ°λ κ΅¬μ‘°κ° Call Stack μ΄λ©°, μ΄μ체μ κ° μ€νμ μν λ©λͺ¨λ¦¬ 곡κ°μ ν λΉμ ν΄μ€λ€.
- μ°μ°μλ€ κ°μ μ°μ μμμ μν΄ κ³μ° μμκ° κ²°μ λλ μμ κ³μ°
- μΈν°λ½νΈμ μ²λ¦¬μ λλμκ° λͺ λ Ή μν μ§μ μ μ μ₯νκΈ° μν μ€ν
- μ»΄νμΌλ¬, μν νΈμΆ κ΄λ¦¬
β 4. μ€νμ μ°μ°
- μ€νμ μ°μ° ꡬννλ λ°©λ²μ κ΄ν λ΄μ©μ
- top: μ€νμμ κ°μ₯ λ§μ§λ§μ μ½μ λ λ°μ΄ν°μ μμΉλ₯Ό κ°λ¦¬ν€λ κ°μ.
(1) μ€νμ μμ μ°μ°
// < --a : μ μ κ°μ >
int a = 5;
int b = --a; // a = 4, b = 4
// < a-- : νμ κ°μ >
int a = 5;
int b = a--; // b = 5, a = 4
- --a (μ μ κ°μ): λ¨Όμ a μ κ°μ 1 μ€μ΄κ³ κ·Έ λ€μ, μ€μ΄λ κ°μ μμ κ²°κ³Όκ°μΌλ‘ μ¬μ©
- a-- (νμ κ°μ): λ¨Όμ νμ¬ a μ κ°μ μμ κ²°κ³Όκ°μΌλ‘ μ¬μ©νλ©° κ·Έ λ€μ, a λ₯Ό 1 μ€μ
- μ¦, μ°μ°μ νκ³ λ³μμ ν λΉνλλ, μ°μ°μ νμ§ μκ³ κ°λ§ λ³μμ ν λΉνλλμ μ°¨μ΄μ.
- 'top--' μμ μ¬μ©λ '--' μ°μ°μμ μμΉμ λ°λΌ μ°μ°μ μ μ©μμκ° λ¬λΌμ§ μ μμ.
- top--: top κ°μ 1 κ°μμν€λ μ°μ°μ μλ―Έν¨.
- μ¦, μ€νμμ λ°μ΄ν°λ₯Ό νλ μμ (pop)ν ν, topμ μλλ‘ μ΄λμν€λ κ²μ μλ―Έν¨.
[ μ€νμ μμ± μ°μ° ]
[ μ€νμ μμ μ°μ° ]
[ μ€νμ μ½μ μ°μ° ]
[ μ 리 ]
- μΆμμλ£ν μ¦, μλ£κ΅¬μ‘°κ° μΆμν λ μΈν°νμ΄μ€λ₯Ό ꡬνν λ΄μ©μ΄λΌκ³ λ³Ό μ μμ.
β 5. μ¬μΉμ°μ°μμ μ μ, νμ, μ€μ νν
(1) μμμ κ³μ°
- μ°μ°μμ κ³μ° μ°μ μμλ₯Ό μκ°ν΄μΌ ν¨
- ex) A + B * C + D -> ((A + (B * C)) + D)
- μ΄λ¬ν μ°μ μμ κ³μ°μ μ¬λμ ν λ²μ λλ μ ν μ μμ§λ§, μ»΄ν¨ν°λ μ 체λ₯Ό λͺ»λ³΄μ§λ§ λ°©λ²μ΄ μμ.
- μ»΄ν¨ν°λ μΌμͺ½λΆν° μ€λ₯Έμͺ½μΌλ‘ μ λ ₯μ΄ λκΈ° λλ¬Έμ μ°μ μμ νμ μ΄ μ΄λ €μ ( μ€νμ νμ© ν¨ )
(2) μμμ νκΈ° λ°©λ²
[ μ€μ νκΈ°λ² (infix notation) ]
- μ°μ°μλ₯Ό νΌμ°μ°μ μ¬μ΄μ νκΈ°νλ λ°©λ²
- A + B
- μ¬λμ΄ μ½κ³ μ΄ν΄νκΈ°λ μ½μ§λ§, μ»΄ν¨ν° μ μ₯μμλ μ°μ°μ μ°μ μμμ κ΄νΈ μ²λ¦¬λ₯Ό ν΄μν΄μΌ ν΄μ 볡μ‘ν¨.
[ μ μ νκΈ°λ² (prefix notation) ]
- μ°μ°μλ₯Ό νΌμ°μ°μ μμ νκΈ°νλ λ°©λ²
- +AB
[ νμ νκΈ°λ² (postfix notation) ]
- μ°μ°μλ₯Ό νΌμ°μ°μμ λ€μ νκΈ°νλ λ°©λ²
- AB+ : Aμ Bλ₯Ό λνκ² λ€λ μ°μ°μ
- κ΄νΈκ° νμ μμ (μ°μ μμκ° νκΈ° λ°©μ μμ μ΄λ―Έ λ°μμ΄ λ¨)
- μ»΄ν¨ν°κ° μ€νμ μ¬μ©ν΄μ κ³μ°νκΈ° λ§€μ° κ°λ¨ν΄μ§
(3) νμ νκΈ°λ²
- μ€μ νκΈ°λ²μ μ°μ μμμ κ΄νΈλ₯Ό ν΄μν΄μΌ ν΄μ 볡μ‘νμ§λ§, νμ νκΈ°λ²μ μ€νλ§μΌλ‘ λ°λ‘ κ³μ°μ΄ κ°λ₯ν¨.
// μμ: AB+ (νμ νκΈ°λ²)
// A -> push
stack: [A]
// B -> push
stack: [A, B]
// + -> pop 2κ° κΊΌλ (B, A) -> A + B κ³μ° -> κ²°κ³Ό push
stack: [A+B]
// μ΅μ’
κ²°κ³Ό: A + B
- κ·Έλμ μ€μ νκΈ°λ²μ νμ νκΈ°λ²μΌλ‘ λ°κΎΈκ² λλ€. μ¦, μ¬λμ΄ μ°κΈ° μ’μ μμμ μ»΄ν¨ν°κ° κ³μ°νκΈ° μ’μ μμμΌλ‘ λ³ν
- μ¦, 첫λ²μ§Έ μμμ μ€μ νκΈ°λ² μ΄λ©°, μλλ‘ κ°μλ‘ νμ νκΈ°λ²μΌλ‘ λ³κ²½ ( μ»΄ν¨ν°κ° μμ보기 μ½κ² )
- B + K λ BK+, /D λλκΈ° μ°μ° λν D/ λ‘ μ€ννμμΌλ‘ μ μ
(4) μ€μ νκΈ°μμ νμ νκΈ°μ λ³ν λ°©λ²
- λ¨Όμ μ€μ νκΈ°μμ μ°μ°μμ μ°μ μμλ₯Ό κ³ λ €νμ¬(νΌμ°μ°μ, μ°μ°μ, νΌμ°μ°μ)μ ννλ‘ κ΄νΈλ‘ λ¬Άμ΄μ€
- κ° κ³μ°λμΉλ₯Ό λ¬Άκ³ μλ κ΄νΈ μμμ μ°μ°μλ₯Ό κ³μ°λμΉμ κ°μ₯ μ€λ₯Έμͺ½μΌλ‘ μ΄λμν΄
- κ° κ³μ°λμΉλ₯Ό νλμ νΌμ°μ°μλ‘ κ³ λ €νμ¬ μλ₯Ό λ°λ³΅ν¨
- κ΄νΈλ₯Ό λͺ¨λ μ κ±°ν¨ ( μ€νμ λ£κ³ 2κ°μ© pop νλ λ°©μ )
1. νΌμ°μ°μ(μ«μ, λ³μ) → μ€νμ push
2. μ°μ°μ → μ€νμμ 2κ° pop → κ³μ° → κ²°κ³Όλ₯Ό λ€μ push
3. λκΉμ§ λ€ μ²λ¦¬νλ©΄ → μ€νμ μ΅μ’
κ²°κ³Ό 1κ°λ§ λ¨μ
- μ¦, νλμ© μ²λ¦¬νλ©΄μ, μ€κ° κ²°κ³Όλ₯Ό κ³μ μ€νμ μμλκ°λ λ°©μμ.
[ μ 리 ]
- κ²°κ΅ ν΄λΉ μ€μ νκΈ°μκ³Ό νμ νκΈ°μ λ³ν λ°©λ²μ μ€νμ μμ©μ μ΄λ°κ² μμΈλ€λ κ²μ μλ €μ£ΌκΈ° μν¨μ.
- κ²°κ΅ μ€μλ νμ νκΈ°μμ κ°λ λ€μ μΈν°ν리ν°λ μ»΄νμΌλ¬μμ μ΄μ©λλ λλ
(5) νμ νκΈ°μμ κ³μ° μκ³ λ¦¬μ¦ ( μ€ν μμ© )
- λ°μ΄ν°λ₯Ό λ°μμ μ μ₯ν λ³μ μ μΈ λ° μ΄κΈ°ν κ³Όμ
- λ°λ³΅λ¬Έμ ν΅ν΄μ exp[i] ( νμ νκΈ°μ ) μ κ°λ€μ νλμ© νΌμ°μ°μμΈμ§ 쑰건문μ ν΅ν΄ 체ν¬
- λ§μ½ νΌμ°μ°μμΈ κ²½μ°μλ push λ₯Ό ν΅ν΄ stack μ κ°μ νλμ© μ±μ
- μμ μ‘°κ±΄λ¬Έμ΄ μ΄μ΄μ Έμλ λΆλΆμ΄λ©°, else λ§μ½ μ°μ°μμΈ κ²½μ°μλ μ¦, +-*/ μΈ κ²½μ°μ μ€νλ¨.
- μ¦, symbol λ³μμ νΌμ°μ°μκ° λ€μ΄κ° μλ κ²½μ°μ else λ¬Έμ΄ μ€ν λ¨.
- oper2 , oper1 κ° λ³μμ pop() μ ν΅ν΄ stack μμ κ°μ λκ° μ κ±°νλ©΄μ 리ν΄μ λ°μ λ³μμ ν λΉμ ν¨.
- ν΄λΉ symbol λ³μμ νΌμ°μ°μ
- switch λ¬Έμ ν΅ν΄ symbol νΌμ°μ°μκ° μ΄λ€κ±΄μ§ νμ ν λ€ μ‘°κ±΄μ λ§κ² μ°μ°μ μνν¨
- μ΅μ’ μ μΈ return pop(); μ λͺ¨λ λ°λ³΅λ¬Έμ μνν λ€ μμμ λ΄μ©μ΄ λΉμλ€. μ¦, λ°°μ΄μ λͺ¨λ κ°μ λ³Έ κ²½μ°μ ν΄λΉλ¨.
- κ²°λ‘ μ λͺ¨λ λ°λ³΅λ¬Έμ μννμΌλ, μ΅μ’ κ²°κ³Όκ°μ΄ λμ¨ μνμΌκ±°μ. μ¦, pop() μ ν¨μΌλ‘μ¨ μ΅μ’ κ°μ λ½μμ 리ν΄μ ν΄μ€.
[ μ 리 ]
- ν΄λΉ μκ³ λ¦¬μ¦μ C νλ‘κ·Έλλ° μΈμ΄μ μ½λλ‘ κ΅¬νν λ΄μ©μ κΈ°λ°ν¨.
'πλ°©μ‘ν΅μ λνκ΅ > π’μλ£κ΅¬μ‘°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ£κ΅¬μ‘°] 4κ° - ν (0) | 2025.09.02 |
---|---|
[μλ£κ΅¬μ‘°] 2κ° - λ°°μ΄ (3) | 2025.08.22 |
[μλ£κ΅¬μ‘°] 1κ° - μλ£κ΅¬μ‘°λ 무μμΈκ°? (0) | 2025.08.21 |