stack

模板栈类实现与测试
//stack.h

#include <iostream>
using namespace std;

template <typename T>
class StackElement
{
public:
	const T element;
	const StackElement<T>*next;
	StackElement(const T& x,const StackElement<T>* n=NULL):element(x),next(n){}
	~StackElement()
	{
		cout << "haha!" << endl;
	}
};

template <typename T>
class Stack
{
public:
	Stack():tmp(NULL),Top(NULL){}
	~Stack(){MakeEmpty();}
	bool IsEmpty()const;
	void MakeEmpty();
	void Push(const T& x);
	const T Pop();
	const T& _Top();

private:
	const StackElement<T>* tmp;
	const StackElement<T>* Top;
};


template <typename T>
bool Stack<T>::IsEmpty()const
{
	return Top==NULL;
}

template <typename T>
void Stack<T>::MakeEmpty()
{
	if(Top!=NULL)
	{
		tmp=Top;
		Top=tmp->next;
		delete tmp;
	}
}

template <typename T>
void Stack<T>::Push(const T& x)
{
	tmp=new StackElement<T>(x,Top);
	Top=tmp;
	tmp=NULL;
}

template <typename T>
const T Stack<T>:: Pop()
{
	tmp=Top;
	Top=tmp->next;
	T x=tmp->element;
	delete tmp;
	return x;
}

template <typename T>
const T& Stack<T>:: _Top()
{
	return Top->element;
}


//test.cpp


#include "stack.h"


int main()
{
<span style="white-space:pre">	</span>Stack<int> IntStack;
<span style="white-space:pre">	</span>Stack<double> DoubleStack;
<span style="white-space:pre">	</span>for(int i=1;i<=10;++i)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>IntStack.Push(i);
<span style="white-space:pre">		</span>DoubleStack.Push(i*1.1);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>for(int i=1;i<=5;++i)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>cout << IntStack.Pop() << endl;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>for(int i=1;i<=5;++i)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>cout << DoubleStack.Pop() << endl;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>while(cin.get()!='\n');
<span style="white-space:pre">	</span>return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值