使用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");
}

  

原文地址:https://www.cnblogs.com/dyc0113/p/3210713.html