C++堆栈类模板实现代码
最近在复习数据结构,涉及到堆栈的实现,通过类模板可以使堆栈的存储数据类型更为灵活,下面是堆栈的实现代码:
#ifndefMYSTACK_H #defineMYSTACK_H #includeusingnamespacestd; template classMyStack { public: MyStack(intsize); ~MyStack(); boolstackEmpty();//判空 boolstackFull();//判满 voidclearStack();//清空 intstackLength();//长度 boolpush(Telem);//压栈 boolpop(T&elem);//出栈 boolstackTop(T&elem);//返回栈顶 voidstackTranverse();//遍历栈 private: T*m_pStack;//栈指针 intm_iSize;//栈容量 intm_iTop;//栈顶 }; template MyStack ::MyStack(intsize) { m_iSize=size; m_pStack=newT[m_iSize]; m_iTop=0; } template MyStack ::~MyStack() { deletem_pStack; m_pStack=NULL; } template boolMyStack ::stackEmpty(){//判空 returnm_iTop==0?true:false; } template boolMyStack ::stackFull(){//判满 returnm_iTop==m_iSize?true:false; } template intMyStack ::stackLength(){//栈长度 returnm_iTop; } template voidMyStack ::clearStack(){//清空 m_iTop=0; } template boolMyStack ::push(Telem){//压栈 if(stackFull()){ returnfalse; } else{ m_pStack[m_iTop++]=elem; returntrue; } } template boolMyStack ::pop(T&elem){//出栈 if(stackEmpty()) { returnfalse; } else{ elem=m_pStack[--m_iTop]; returntrue; } } template boolMyStack ::stackTop(T&elem){//返回栈顶元素 if(stackEmpty()) { returnfalse; } else{ elem=m_pStack[m_iTop-1]; returntrue; } } template voidMyStack ::stackTranverse(){//遍历栈 inti=0; for(i=0;i 其中需要注意的是类模板需要在每个函数之前写上模板定义template
,并且将类名写成MyStack ,函数中涉及到类的使用时用T代替即可。 接着我用一个坐标点类Coordinate来做测试:
在Coordinate类中利用函数重载运算符<<实现坐标点的打印
#includeusingnamespacestd; classCoordinate { public: friendostream&operator<<(ostream&out,Coordinate&coor); Coordinate(intx=0,inty=0) { m_iX=x; m_iY=y; } ~Coordinate() { } private: intm_iX; intm_iY; }; ostream&operator<<(ostream&out,Coordinate&coor){ out<<"("< 下面是测试主函数:
#include#include"MyStack.h" #include"Coordinate.h" usingnamespacestd; intmain(){ MyStack *pStack=newMyStack (5); pStack->push(Coordinate(3,5));//坐标点入栈 pStack->push(Coordinate(7,5)); pStack->push(Coordinate(6,5)); pStack->push(Coordinate(4,5)); pStack->push(Coordinate(3,5)); pStack->stackTranverse();//遍历栈 Coordinatet; pStack->pop(t);//出栈 cout<<"弹出的t为:"< stackLength(); pStack->clearStack();//清空栈 pStack->stackTranverse(); //deletepStack; //pStack=NULL; system("pause"); return0; } 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。