-----Test.h文件-----------------------------------------
#ifndef TEST_H #define TEST_H #include<iostream> using namespace std; template<class T> class CMyStack { private: struct Item { public: T data; Item *next; Item():next(NULL){} }; Item *m_data; Item *m_min; CMyStack(const CMyStack&); CMyStack& operator=(const CMyStack&); public: CMyStack(); ~CMyStack(); T &top(); bool empty(); void pop(); void push(const T &); const T &min(); }; template<class T> CMyStack<T>::CMyStack():m_data(NULL),m_min(NULL){} template<class T> CMyStack<T>::~CMyStack() { if(m_data!=NULL) { Item *p,*q; p=m_data; q=NULL; while(p!=NULL) { q=p; p=p->next; delete q; } } } template<class T> T& CMyStack<T>::top() { if(!empty()) return m_data->data; else throw exception("stack is empty"); } template<typename T> bool CMyStack<T>::empty() { if(m_data==NULL) return true; else return false; } template<typename T> void CMyStack<T>::pop() { if(!empty()) { Item *p=m_data; m_data=m_data->next; delete p; p=m_min; m_min=m_min->next; delete p; } else { throw exception("stack is empty"); } } template<typename T> void CMyStack<T>::push(const T &t) { Item *p=new Item(); p->data=t; Item *q=new Item; if(!empty()) { if(t>m_min->data) { q->data=m_min->data; } else q->data=t; } else { q->data=t; } q->next=m_min; m_min=q; p->next=m_data; m_data=p; } template<typename T> const T &CMyStack<T>::min() { if(!empty()) { return m_min->data; } else { throw exception("stack is empty"); } } #endif
----------------------main.cpp中的调用-----------------------------------------------
void main() { CMyStack<int> myStack; int a; for(int i=0;i<5;i++) { cin>>a; myStack.push(a); cout<<"min:"<<myStack.min()<<endl; } for(int i=0;i<5;i++) { cout<<"min:"<<myStack.min()<<endl; myStack.pop(); } system("pause"); }