#include<iostream.h>
struct node
{
int data;
node *next;
};
class LinkStack
{
public:
LinkStack(){top=NULL;} //构造函数置空链栈
~LinkStack(); //析构函数,释放链栈中个节点的存储空间
void Push(int x); //将元素x进栈
int Pop(); //将栈顶元素出栈
int Gettop() //获取栈顶元素
{if(top!=NULL)return top->data;} //取栈顶元素(并不删除)
bool empty() //判断链栈是否为空栈
{
if(top==NULL)
return 1;
else
return 0;
}
private:
node *top; //栈顶指针即链栈的头指针
};
void LinkStack::Push(int x) //元素进栈
{
node *s=new node; //申请一个数据域为x的节点s
s->data=x;
s->next=top; //将节点s插在栈顶
top=s;
}
int LinkStack::Pop() //元素出栈
{
int x;
if(top==NULL) throw"下溢";
x=top->data; //暂存栈顶元素
node *p=top; //将栈顶节点摘链
top=top->next;
delete p;
return x;
}
LinkStack::~LinkStack() //析构函数将链栈中所有节点的存储空间释放
{
while(top)
{
node *p=top->next;
delete top;
top=p;
}
}
void main()
{
LinkStack link;
int data;
cout<<"请输入进栈的10个元素:";
for(int i=0;i<10;i++) //输入进栈的10个元素
{
cin>>data;
link.Push(data);
}
link.Pop(); //栈顶元素出栈
cout<<"现在栈顶的元素为:"<<link.Gettop()<<endl; //输出栈顶元素
while(!link.empty())
cout<<"现在出栈的是:"<<link.Pop()<<endl; //所有元素一个一个出栈
}