栈的链表实现

来源:互联网 发布:淘宝手机版新品上架 编辑:程序博客网 时间:2024/05/21 20:55

最近在学数据结构,在参照书的过程中,再结合自己的一些理解,实现了一些基本操作,写得不好(ps:呜呜,word都不会做了),其中肯定存在着不少错误,如果您发现了其中的错误,欢迎指出

个人觉得要注意的地方是:头结点的next指针指向栈顶

 

代码如下:

//栈链表.cpp: 定义控制台应用程序的入口点。

//

 

#include"stdafx.h"

 

structListStack

{

        int data;

        ListStack *next;//头结点的next指针指向栈顶

};

 

boolisEmpty(ListStack *ls)

{

        return ls->next == NULL?true:false;

}

 

intgetLength(ListStack *ls)

{

        int count = 0;

        ListStack *s = ls->next;

        while(s != NULL)

        {

                  count++;

                  s = s->next;

        }

        return count;

}

 

voidpush_stack(ListStack *ls,int data)

{

        ListStack *s = new  ListStack;

        s->data = data;

        s->next = ls->next;//新结点的next指针指向栈顶

        ls->next = s;//新结点成为新栈顶

        //if(ls->top!=NULL)cout<<ls->top->data<<endl;

}

 

voidpop_stack(ListStack *ls)

{

        if(ls->next == NULL)

        {

                  cout<<"当前栈为空,出栈失败!"<<endl;

                  return;

        }

        ls->next = ls->next->next;

}

 

voiddisplay(ListStack *ls)

{

        if(ls->next == NULL)

        {

                  cout<<"当前栈为空"<<endl;

                  return;

        }

        else

        {

                  ListStack *s = new ListStack;

                  s = ls->next;

                  while(s != NULL)

                  {

                           cout<<s->data<<"  ";

                           s = s->next;

                  }

        }

        cout<<endl;

}

 

voidinitListStack(ListStack *ls)

{

        ls->next = NULL;

}

 

int_tmain(int argc, _TCHAR* argv[])

{

        ListStack *ls = new ListStack;

        initListStack(ls);

        //cout<<isEmpty(ls);

        push_stack(ls,4);

        push_stack(ls,32);

        push_stack(ls,33);

        //cout<<getLength(ls)<<endl;

        pop_stack(ls);

        display(ls);

        return 0;

}

 其中绝大部分代码都有注释了,如果您发现了其中的错误,欢迎指出。

 

原创粉丝点击