栈的链表实现相对来说较为容易,而且很灵活,数组实现的话得考虑空间不够用时增加空间,但是链表实现不需要考虑这个。
对于一些编译器来说,派生类必须把父类中的虚函数全部实现,否则会报错,编译器会把派生类认成抽象类,这是一件很麻烦的事情。
#include<iostream>
using namespace std;
//先实现数据抽象类,然后再从抽象类中派生。
/*
栈的基本操作:
出栈
入栈
返回栈顶元素
辅助操作:
判断栈空
返回栈中元素个数
*/
template<class T>
class stack{
public:
virtual ~stack(){
};
virtual bool empty()const=0;
virtual int size()const=0;
virtual void pop()=0;
virtual T top()=0;
virtual void push(const T& element)=0;
};
template<class T>
struct node{
T element;
node<T> *next;
//方法
node(){
} ;
node(const T& mElement){element=mElement;
}
node(const T& mElement,node<T>* mNext)
{
element=mElement;
next=mNext;
}
};
template<class T>
class stack_link : public stack<T>{
private:
node<T> *stackTo