您的位置:首页 > 其它

链栈入门

2016-09-26 09:32 120 查看
最近复习了一下栈,顺便也敲了一些代码,在此列出来,与大家分享,如果有什么不对或需要改进的地方还请大家指出来。


#include<iostream>

using namespace std;

typedef struct node

{

    int data;

    struct node *next;

}LinkStack;

LinkStack *initStack() //含头结点的栈

{

    LinkStack *L;

    L=new LinkStack;

    L->next=NULL; //栈为空

    cout<<"初始化栈成功!"<<endl;

    return L;

}

int StackEmpty(LinkStack *L)

{

    if(!L->next)

        cout<<"栈空"<<endl;

}

void Push(LinkStack *L,int e)

{

    cout<<"元素入栈了!"<<endl;

    LinkStack *p;

    p=new LinkStack;

    p->data=e;

    p->next=L->next;

    L->next=p;

}

int Pop(LinkStack *L,int *e)

{

    LinkStack *p;

    if(!L->next)

        return 0;

    p=L->next;

    *e=p->data;

    L->next=p->next;

    delete p;

    return 1;

}

int GetTop(LinkStack *L,int *e)

{

    if(!L->next)

        return 0;

    *e=L->data;

    return 1;

}

void DispStack(LinkStack *L)

{

    LinkStack *p=L->next;

    cout<<"显示栈: ";

    if(!p)

        cout<<"NULL";

    else

    {

        while(p)

        {

            cout<<p->data<<" ";

            p=p->next;

        }

    }

    cout<<endl;

}

void ClearStack(LinkStack *L)

{

    LinkStack *p=L->next;

    while(p)

    {

        delete L;

        L=p;

        p=p->next;

    }

}

int StackLength(LinkStack *L)

{

    cout<<"开始计算栈长了!"<<endl;

    int i=0;

    LinkStack *p;

    p=L->next;

    while(p)

    {

        i++;

        p=p->next;

    }

    return i;

}

int main(void)

{

    int e,x;

    LinkStack *L;

    L=initStack();

    StackEmpty(L);

    cout<<"输入入栈元素: ";

    while(cin>>e)

    {

        Push(L,e);

    }

    cout<<"栈长为: "<<StackLength(L)<<endl;

    DispStack(L);

    cout<<"出栈元素为: ";

    while(Pop(L,&x))

    {

        cout<<x<<" ";

    }

    cout<<endl;

    ClearStack(L);

    if(StackEmpty(L))

        cout<<"栈空!";

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: