stack.h typedef struct _tagNode ... { int _nData; _tagNode* _pNext;} NODE, * LPNODE; class CStack ... {public: CStack(); virtual ~CStack();public: bool Pop(int& nData); bool Push(int nData); int Size() const;protected: LPNODE m_pTop; int m_nSize;} ; stack.cpp CStack::CStack() ... { m_pTop = NULL; m_nSize = 0;} CStack:: ~ CStack() ... { int nData = 0; while(Pop(nData)); } bool CStack::Push( int nData) ... { LPNODE pNew = new NODE; if (NULL == pNew) return false; pNew->_nData = nData; pNew->_pNext = m_pTop; m_pTop = pNew; m_nSize++; return true;} bool CStack::Pop( int & nData) ... { if (NULL == m_pTop) return false; LPNODE pNextNode = m_pTop->_pNext; nData = m_pTop->_nData; delete m_pTop; m_pTop = pNextNode; m_nSize--; return true;} int CStack::Size() const ... { return m_nSize;}