#include<iostream>
using namespace std;
template<class T> //T为虚拟类型
struct node
{
T d;
node *next;
};
//定义带链栈类
template<class T> //模板声明,数据元素虚拟类型为T
class linked_Stack //带链栈类
{
private: //数据成员
node<T> *top; //带链栈栈顶指针
public: //成员函数
linked_Stack(); //构造函数,建立空栈,即栈初始化
void prt_linked_Stack(); //顺序输出带链栈中的元素
int flag_linked_Stack(); //检测带链栈的状态
void ins_linked_Stack(T); //入栈
T del_linked_Stack(); //退栈
T read_linked_Stack(); //读栈顶元素
};
//带链栈初始化
template<class T>
linked_Stack<T>::linked_Stack()
{
top=NULL; //栈顶指针为空
return;
}
//顺序输出栈中的元素
template<class T>
void linked_Stack<T>::prt_linked_Stack()
{
node<T> *p;
p=top;
if(p==NULL)
{
cout<<"空栈!"<<endl;
return;
}
do
{
cout<<p->d<<endl;
p=p->next;
} while (p!=NULL);
}
//检测带链栈的状态
template<class T>
int linked_Stack<T>::flag_linked_Stack()
{
if(top==0)return(0); //若带链栈为空,则函数返回0
return(1); //正常函数返回1
}
//入栈
template<class T>
void linked_Stack<T>::ins_linked_Stack(T x)
{
node<T> *P;
P=new node<T>; //申请一个新结点
p->d=x; //置新结点数据域值
p->next=top; //置新结点指针域值
top=p; //栈顶指针指向新结点
return;
}
//退栈
template<class T>
T linked_Stack<T>::del_linked_Stack()
{
T y;
node<T> *q;
if(top==NULL)
{
cout<<"空栈!"<<endl;
return(0);
}
q=top;
y=q->d; //栈顶元素赋给变量
top=q->next; //栈顶指针指向下一个结点
delete q; //释放结点的空间
return(y); //返回退栈的元素
}
//读栈顶元素
template<class T>
T linked_Stack<T>::read_linked_Stack()
{
if(top==NULL)
{
cout<<"空栈!"<<endl;
return(0);
}
return(top->d); //返回栈顶元素
}