使用C++模板实现栈的求最小值功能
-----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");
}
浙公网安备 33010602011771号