//文件 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;
}
栈类模板的使用
最新推荐文章于 2023-07-23 19:52:40 发布