链栈入门

来源:互联网 发布:out of the woods知乎 编辑:程序博客网 时间:2024/06/05 01:12

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

#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;
}

0 0