链栈

来源:互联网 发布:python升级到2.7 编辑:程序博客网 时间:2024/05/16 05:37
#include<cstdio>#include<cstdlib>#include<iostream>using namespace std;typedef int ElemType;typedef struct LinkNode{ElemType data;LinkNode *next;}*LiStack,StackNode;//数据链的结构 typedef struct {StackNode *Top;ElemType count;}LinkStackTop;//存储数据的链 void InitStack(LinkStackTop *S){S->Top = (LiStack)malloc(sizeof(LinkNode));//初始栈顶地址为栈底 if(!S->Top)    cout<<"已经是空栈"<<endl;else{S->Top=NULL;S->count=0;}}void Push(LinkStackTop *S,ElemType e){LiStack p=(LiStack)malloc(sizeof(LinkNode));//缓存入栈数据的指针 ,便于更新栈顶数据 p->data=e;p->next=S->Top;S->Top=p;//更新栈顶数据 S->count++;//统计数据总数 } void Pop(LinkStackTop *S,ElemType e){LiStack p;e=S->Top->data;p=S->Top;S->Top=S->Top->next;free(p);S->count--;}void ClearStack(LinkStackTop *S){StackNode *p,*q;p=S->Top;while(p){q=p;p=p->next;free(q);}S->count=0;}void StackEmpty(LinkStackTop *S){if(S->count==0)cout<<"栈空"<<endl;elsecout<<"栈不为空"<<endl;}void StackLength(LinkStackTop *S){cout<<S->count<<endl;}void GetTop(LinkStackTop *S,ElemType e){if(S->Top==NULL)cout<<"栈为空"<<endl;else    cout<<S->Top->data<<endl;}void StackTreaver(LinkStackTop *S){LiStack p;p=S->Top;while(p){cout<<p->data<<endl;p=p->next;}}int main(){int e;LinkStackTop s;InitStack(&s);    for(int j=1;j<=10;j++)          Push(&s,j);     cout<<"输出栈中元素:"<<endl;    StackTreaver(&s);    cout<<"栈是否为空"<<endl;     StackEmpty(&s);    cout<<"栈长度"<<endl;     StackLength(&s);    Pop(&s,e);        cout<<"栈是否为空"<<endl;     StackEmpty(&s);    cout<<"栈长度"<<endl;     StackLength(&s);    GetTop(&s,e); return 0;}