-
[C++] μ€νμ κ°λ κ³Ό STL Stack μ¬μ©λ²Algorithm & Data Structure 2022. 1. 15. 22:46λ°μν
λ€μ΄κ°λ©°
μμΌλ‘ μΈ κ°μ§ κ΄λ ¨ μλ μλ£κ΅¬μ‘°μΈ μ€ν, ν, λ±μ λν΄μ λ€λ£° κ²μ΄λ€. μ€νμ λ¨Όμ λ€μ΄κ° μμκ° μ μΌ λμ€μ λμ€κ² λλ ꡬ쑰μ¬μ FILO(First In Last Out) μλ£κ΅¬μ‘°λΌκ³ λΆλ₯΄κΈ°λ νλ€. λν λ°λλ‘ λμ€μ λ€μ΄κ° μμκ° μ μΌ λ¨Όμ λμ€κ² λλ ꡬ쑰μ΄λ―λ‘ LIFO(Last In First Out)μ ννλ₯Ό λ λ μλ£κ΅¬μ‘°μ΄κΈ°λ νλ€. κ·Έλ¦¬κ³ C++ STLμ μ€νμ΄ κ΅¬νλμ΄ μμ΄ μ½κ² μ΄μ©ν μ μλ€!
μ€ν(Stack) μ΄λ?
μ€ν(stack)μ μ νμ μΌλ‘ μ κ·Όν μ μλ λμ΄ κ΅¬μ‘°μ΄λ€. κ·Έ μ κ·Ό λ°©λ²μ μΈμ λ λͺ©λ‘μ λμμλ§ μΌμ΄λλ€. λλ¨Όμ λ΄κΈ° λͺ©λ‘(Pushdown list)μ΄λΌκ³ λ νλ€.
μ€νμ ν μͺ½ λμμλ§ μλ£λ₯Ό λ£κ±°λ λΊ μ μλ μ ν ꡬ쑰(LIFO - Last In First Out)μΌλ‘ λμ΄ μλ€. μλ£λ₯Ό λ£λ κ²μ 'λ°μ΄λ£λλ€' νμ¬ νΈμ¬(push)λΌκ³ νκ³ λ°λλ‘ λ£μ΄λ μλ£λ₯Ό κΊΌλ΄λ κ²μ ν(pop)μ΄λΌκ³ νλλ°, μ΄λ κΊΌλ΄μ§λ μλ£λ κ°μ₯ μ΅κ·Όμ νΈμ¬ν μλ£λΆν° λμ€κ² λλ€. μ΄μ²λΌ λμ€μ λ£μ κ°μ΄ λ¨Όμ λμ€λ κ²μ LIFO ꡬ쑰λΌκ³ νλ€.
- μν€λ°±κ³Όμ€ν
μ€νμ λν΄μ μλμ μ¬μ§μ λ³΄κ³ μ΄ν΄ν΄λ³΄μ.
μ μ¬μ§μ 보면 32 μμλ₯Ό λ£κ³ , 47 μμλ₯Ό λ£μλ€. κ·Έλ¦¬κ³ μμλ₯Ό μ κ±°ν λ κ°μ₯ λ§μ§λ§μ λ£μ 47 μμκ° λΉ μ Έλκ°λ κ²μ μ μ μλλ° μ΄λ¬ν ꡬ쑰λ₯Ό μ€νμ΄λΌκ³ λΆλ₯Έλ€.
μ€νμ μ±μ§
- μμλ₯Ό μΆκ°νκ±°λ μμλ₯Ό μ κ±°νκΈ° μν΄ O(1)μ μκ° λ³΅μ‘λκ° νμνλ€.
- μ μΌ μλ¨μ μμλ₯Ό νμΈνκΈ° μν΄ O(1)μ μκ° λ³΅μ‘λκ° νμνλ€.
- μ μΌ μλ¨μ μλ μμκ° μλ μμλ€μ νμΈνκ±°λ λ³κ²½νλ κ²μ μμΉμ μΌλ‘ λΆκ°λ₯νλ€. (λ°°μ΄μ μ΄μ©ν΄ μ€νμ ꡬννλ©΄ νμΈ κ°λ₯νλλ‘ λ§λ€ μ μλ€.)
STL Stack
μλλ stack ν€λ νμΌμ μ μΈμ΄λ€.
#include <stack> ...
Stack μ μΈ
#include <iostream> #include <stack> using namespace std; int main(void) { stack<int> S1; // λΉμ΄μλ int stack μ μΈ stack<char> S2; // λΉμ΄μλ char stack μ μΈ return 0; }
Stack κ° μΆκ°
stackμ κ°μ μΆκ°νκΈ° μν΄μλ push() ν¨μλ₯Ό μ¬μ©νλ©΄ λλ€.
#include <iostream> #include <stack> using namespace std; int main(void) { stack<int> S; // λΉμ΄μλ int stack μ μΈ S.push(1); // 1 S.push(2); // 1 2 S.push(3); // 1 2 3 return 0; }
Stack ν¬κΈ°
stackμ ν¬κΈ°λ₯Ό ꡬνκΈ° μν΄μλ size() ν¨μλ₯Ό μ¬μ©νλ©΄ λλ€. κ·Έλ¦¬κ³ stackμ΄ λΉμ΄μλμ§ νμΈνκΈ° μν΄μ empty() ν¨μλ₯Ό μ¬μ©ν μ μλ€.
#include <iostream> #include <stack> using namespace std; int main(void) { stack<int> S; // λΉμ΄μλ int stack μ μΈ S.push(1); // 1 S.push(2); // 1 2 S.push(3); // 1 2 3 cout << S.size() << '\n'; // 3 if (!S.empty()) { cout << "stack is not empty!" << '\n'; } return 0; }
Stack κ° μμ
stackμ κ°μ μμ νκΈ° μν΄μλ pop() ν¨μλ₯Ό μ¬μ©νλ©΄ λλ€. μ€νμ΄ λΉμ΄μλ λ° pop() ν¨μλ₯Ό νΈμΆνλ©΄ λ°νμ μλ¬κ° λ°μνλ€!
#include <iostream> #include <stack> using namespace std; int main(void) { stack<int> S; // λΉμ΄μλ int stack μ μΈ S.push(1); // 1 S.push(2); // 1 2 S.push(3); // 1 2 3 cout << S.size() << '\n'; // 3 if (!S.empty()) { cout << "stack is not empty!" << '\n'; } S.pop(); // 1 2 return 0; }
Stack μ μΌ μλ¨ κ° νμΈ
STL Stackμμλ μ μΌ μλ¨ μ΄μΈμ μμμ κ°μ νμΈνκ±°λ λ³κ²½ν μ μλ€. μ€νμ μ μΌ μλ¨μ κ°μ νμΈνκΈ° μν΄μλ top() ν¨μλ₯Ό μ¬μ©νλ©΄ λλ€. κ·Έλ¦¬κ³ μ€νμ΄ λΉμ΄μλ λ° top() ν¨μλ₯Ό νΈμΆνλ©΄ λ°νμ μλ¬κ° λ°μνλ€!
#include <iostream> #include <stack> using namespace std; int main(void) { stack<int> S; // λΉμ΄μλ int stack μ μΈ S.push(1); // 1 S.push(2); // 1 2 S.push(3); // 1 2 3 cout << S.size() << '\n'; // 3 if (!S.empty()) { cout << "stack is not empty!" << '\n'; } S.pop(); // 1 2 cout << S.top() << '\n'; // 2 S.pop(); // 1 cout << S.top() << '\n'; // 1 return 0; }
λ°μν