#include <iostream>
using namespace std;
/*链栈的定义*/
typedef struct sNode
{
char data;
struct sNode * next;
}sNode;
typedef sNode *linkStack;
/*初始化链栈*/
void initStack_L(linkStack &S)
{
S=new sNode;
S->next=NULL;
}
/*建立一个链栈*/
void creatStack_L(linkStack &S,int n)
{
initStack_L(S);
for(int i=0;i<n;i++)
{
sNode *q=new sNode;
cin>>q->data;
q->next=S->next;
S->next=q;
}
}
/*销毁链栈*/
void destroyStack_L(linkStack &S)
{
while(S)
{
sNode *q;
q=S;
S=S->next;
delete q;
}
}
/*求栈长*/
int lengthStack_L(linkStack &S)
{
sNode *q;
int count;
q=S;
count=0;
while(q->next)
{
count++;
q=q->next;
}
return count;
}
/*入栈*/
void pushStack_L(linkStack &S,char x)
{
sNode *q=new sNode;
q->data=x;
S->next=q;
q->next=S->next;//此处不用考虑栈满的情况。
}
/*出栈*/
char popStack_L(linkStack &S)
{
if(S->next==NULL)
{
cout<<"Satck Empty!";
}//此处得考虑栈空的情况。
sNode *q;
char e;
q=S->next;
e=q->data;
S->next=q->next;
delete q;
return e;
}
void main()
{
linkStack S;
creatStack_L(S,6);
cout<<popStack_L(S)<<endl;
pushStack_L(S,'a');
cout<<popStack_L(S)<<endl;
}