1. Stack ¶
- μ€ν(Stack) : λμ€μ λ€μ΄μ¨κ² λ¨Όμ λκ°. λ°μ λ§ν μκ³ μλ§ λ«λ € μλ ν΅μ΄λΌκ³ μκ°νλ©΄ λ¨. λ°μ λλ €λ΄κ³ κΊΌλΌμλ μλ λ
Έλ¦μ΄λ μ§μ΄λ£μλλ μλ‘, λΊλλ μλ‘ λΉΌμΌκ² μ Έ?^^;;
- top ν¬μΈν°λ 맨 λμ€μ μ§μ΄ λ£μ λ
Έλλ₯Ό κ°λ₯΄ν΄.
- λ°λΌμ λ°μ΄ν°κ° μΆκ°λκ±°λ μμ λ λλ§λ€ topν¬μΈν°κ° λ³νκ² μ£ ?^^;;
1.1. λ°°μ΄λ‘ μ§ μ€ν ¶
~cpp class Stack { enum {Size=100}; private: int data[Size]; int top; bool IsEmpty(); bool IsFull(); public: Stack() { top=-1; } bool Push(int ndata); bool Pop(); void Show(); ~Stack() {} }; bool Stack::IsEmpty() { if(top==-1) return true; return false; } bool Stack::IsFull() { if(top==Size-1) return true; return false; } bool Stack::Push(int ndata) { if(!IsFull()) { data[++top]=ndata; return true; } else { cout<<"κ½ μ°Όλ€"; return false; } } bool Stack::Pop() { if(!IsEmpty()) { top--; return true; } else { cout<<"λΉμλ€"; return false; } } void Show() { int temp=top; while(temp!=-1) cout<<data[temp--]; }
1.2. Linked Listλ‘ λ§λ Stack ¶
~cpp class Stack { private: struct Node { int m_nData; Node* m_pPrev; }; Node* Head; // μ무κ²λ μλ ν€λ λ Έλ νλ μμ±(μκ² μμΌλ©΄ μμ² νΈν¨!) Node* top; bool IsEmpty(); public: Stack(); void Push(int x); void Pop(); void Show(); ~Stack(); }; Stack::Stack() { Head=new Node; Head->m_pPrev=NULL; top=Head; } void Stack::Push(int x) { Node* temp=new Node; temp->m_nData=x; temp->m_pPrev=top; top=temp; } bool Stack::Pop() { if(!IsEmpty()) { Node* temp=top->m_pPrev; delete top; top=temp; return true; } else { cout<<"λΉμλ€"; return false; } } void Stack::Show() { Node* temp=top; while(!IsEmpty()) { cout<<top->m_nData<<endl; top=top->m_pPrev; } top=temp; } bool Stack::IsEmpty() { if(top==Head) return true; return false; } Stack::~Stack() { while(!IsEmpty()) { Pop(); } delete Head; }