/*********************************栈的抽象类的定义****************************/
template <class dataType>
class stack{
public:
virtual bool isEmpty()=0;
virtual void push(const dataType& d)=0;
virtual dataType pop()=0;
virtual dataType top()=0;
};
/*********************************链栈类的定义********************************/
#include "stack.h"
template <class dataType>
class linkStack:public stack<dataType>{
public:
linkStack(); //构造函数
bool isEmpty(); //判空函数
void push(const dataType& d); //进栈函数
dataType pop(); //出栈函数
dataType top(); //返回栈顶元素
~linkStack(); //析构函数
private:
//定义节点
struct node{
dataType data; //结点中保存的数据
node* next; //后继指针
node():next(NULL){}; //构造函数,无参数
node(const dataType& d,node* n=NULL):data(d),next(n){}; //构造函数,带参数
};
node* top_p; //栈顶指针
};
/***********************************链栈类的实现******************************/
#include <iostream>
using namespace std;
template <class dataType>
linkStack<dataType>::linkStack(){
top_p=NULL;
cout<<"\nCreate stack success!\n";
}
template <class dataType>
bool linkStack<dataType>::isEmpty(){
return top_p==NULL;
}
template <class dataType>
void linkStack<dataType>::push(const dataType& d){
node* add=new node(d,top_p);
top_p=add;
cout<<"\nPush data success!\n";
}
template <class dataType>
dataType linkStack<dataType>::pop(){
//如果栈为空,抛出异常值0
if(isEmpty()){
throw 0;
}
dataType d=top_p->data;
node* tmp=top_p;
top_p=top_p->next;
delete tmp;
return d;
}
template <class dataType>
dataType linkStack<dataType>::top(){
//如果栈为空,抛出异常值0
if(isEmpty()){
throw 0;
}
return top_p->data;
}
template <class dataType>
linkStack<dataType>::~linkStack(){
while(top_p!=NULL){
node* tmp=top_p;
top_p=top_p->next;
delete tmp;
}
}
C++类模板实现链栈
最新推荐文章于 2022-07-04 19:18:12 发布