栈类模板的使用

//文件 stack.h
//声明类模板 stack
#include<iostream.h>
#include<string.h>



template <class TYPE>  //模板声明,其中TYPE为类型参数
class Stack    //类模板名为stack
{
	public:
		Stack(int=10);    //构造函数,默认长度为10
        ~Stack()    
		{
			delete [] stackPtr;   //释放内存
		}
		int pop(TYPE&);//声明函数pop()的原型,将函数取出栈
		int isFull() const//成员函数,判断栈是否满
		{
			return top==size-1;
		}
        int push(const TYPE&);  //声明函数push()的原型,将元素压入栈
		int isEmpty() const//成员函数,判断栈是否空
		{
			return top==-1;
		}
	private:
		int size;
		int top;
		TYPE* stackPtr;
};




// Stack.cpp
//类模板中成员函数的实现
#include"Stack.h"
template<class TYPE>
 Stack <TYPE>::Stack(int s)//构造函数
{
	(size=s>0 && s<1000)?s:10;
	top=-1;
	stackPtr=new TYPE[size];
} 
//将一个元素压入栈
template<class TYPE>//模板声明
int Stack<TYPE>::push(const TYPE& item)//在类模板体外定义成员函数push(),参数类型为TYPE
{
   if(!isFull())
   {
	  stackPtr[++top]=item;
	  return 1;
   }
   return 0;
}
//将一个元素取出栈
template<class TYPE>//模板声明
int Stack<TYPE>::pop(TYPE&  popValue)//在类模板体外定义成员函数pop(),返回类型为TYPE
{
	if(!isEmpty())
	{
		popValue=stackPtr[top--];
		return 1;
	}
	return 0;
}





//main.cpp
#include"Stack.h"
int main()
{
	Stack<char>charStack;//创建字符型栈对象charStack
	char c='a';
	cout<<"Pushing elements onto charStack"<<endl;
	while(charStack.push(c))
	{
		cout<<c<<" ";
		c+=1;
	}
	cout<<endl<<"Stack is full.Cannot push"<<c<<endl<<
		"Poping elements from charStack"<<endl;
	while(charStack.pop(c))
		cout<<c<<" ";
	cout<<endl<<"Stack is empty.Cannot pop"<<endl;
    Stack<double>doubleStack(5);//创建双精度型栈对象doubleStack
	double f=1.1;
	cout<<"Pushing elements onto doubleStack"<<endl;
	while(doubleStack.push(f))
	{
		cout<<f<<" ";
		f+=1.1;
	}
	cout<<endl<<"Stack is full.Cannot push"<<f<<endl<<
		"Poping elements from doubleStack"<<endl;
	while(doubleStack.pop(f))
		cout<<f<<" ";
	cout<<endl<<"Stack is empty.Cannot pop"<<endl;
    Stack<int>intStack;//创建整型栈对象intStack
	int i=1;
	cout<<"Pushing elements onto intStack"<<endl;
	while(intStack.push(i))
	{
		cout<<i<<" ";
		i+=1;
	}
	cout<<endl<<"Stack is full.Cannot push"<<i<<endl<<
		"Poping elements from intStack"<<endl;
	while(intStack.pop(i))
		cout<<i<<" ";
	cout<<endl<<"Stack is empty.Cannot pop"<<endl;
	return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值