#include "stdio.h"
#include "stdlib.h"
typedef int ElemType;
typedef struct LNode
{ ElemType data; //数据域
struct LNode *next; //指针域
}LinkNode,*LinkStack;
bool InitStack(LinkStack &s)
{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->next=NULL;
return 1;
}
void DestroyStack(LinkStack &s)
{ LinkStack p=s,q=s->next;
while (q!=NULL)
{ free(p);
p=q;
q=p->next;
}
free(p); //此时p指向尾节点,释放其空间
}
int StackEmpty(LinkStack s)
{
if(s->next==NULL)
return 1;
else
return 0;
}
void Push(LinkStack &s,ElemType e)
{ LinkStack p;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e; //新建元素e对应的节点p
p->next=s->next; //插入p节点作为开始节点
s->next=p;
}
int Pop(LinkStack &s,ElemType &e)
{ LinkStack p;
if (s->next==NULL) //栈空的情况
return 0;
p=s->next; //p指向开始节点
e=p->data;
s->next=p->next; //删除*p节点
free(p); //释放*p节点
return 1;
}
int GetTop(LinkStack s,ElemType &e)
{ if (s->next==NULL) //栈空的情况
return 0;
e=s->next->data;
return 1;
}
int main()
{
LinkNode *S;
InitStack(S);
Push(S,'a');
Push(S,'b');
Push(S,'c');
Push(S,'d');
printf("栈为%s\n",StackEmpty(S)?"空":"非空");
ElemType e;
/*Pop(S,e);
printf("%c出栈\n",e);
Pop(S,e);
printf("%c出栈\n",e);
Pop(S,e);
printf("%c出栈\n",e);
Pop(S,e);
printf("%c出栈\n",e); */
while(!StackEmpty(S))
{
Pop(S,e);
printf("%c出栈\n",e);
}
printf("栈为%s",StackEmpty(S)?"空":"非空");
}