链栈的c++实现

来源:互联网 发布:怎么下载不了软件 编辑:程序博客网 时间:2024/06/06 09:04
 1876人阅读 评论(0) 收藏 举报

          链栈是借用单链表实现的栈。其不同于顺序栈之处在于:

1、链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限。而顺序栈则是

静态分配内存的。

2、链栈动态分配内存的特性使得它一般无需考虑栈溢出的问题。

          链栈的的组织结构如下图所示。容易发现其是架构的单链表的基础之上的。

 

              下面介绍下我用C++实现的链栈,VC6下调试。

1、文件的组织结构

 

2、ls.h链栈类的说明

[cpp] view plaincopyprint?
  1. #ifndef _LS_H_  
  2. #define _LS_H_  
  3.   
  4. typedef int dataType;  
  5.   
  6. struct node                   //链栈节点  
  7. {  
  8.     dataType data;            //数据域  
  9.     node *next;               //指针域  
  10. };  
  11.   
  12. class ls  
  13. {  
  14. public:  
  15.     ls();  
  16.     ~ls();  
  17.     void push(dataType var); //压栈  
  18.     void pop();              //出栈.出栈之前并不判断栈是否已空.需要通过isEmpty()判断  
  19.     dataType stackTop();     //取栈顶元素,栈顶无变化.不提前判断栈是否为空  
  20.     bool isEmpty();          //判空.空返回true,反之返回false  
  21.     //bool isFull();         //判满.链栈是动态分配内存空间的,无需判满  
  22.   
  23. private:  
  24.     node *top;               //栈顶指针.top=NULL表示为空栈  
  25. };  
  26.   
  27. #endif  


3、ls.cpp链栈类成员函数的定义

[cpp] view plaincopyprint?
  1. #include <iostream>  
  2. #include "ls.h"  
  3. using namespace std;  
  4.   
  5. ls::ls()  
  6. {  
  7.     top = NULL;            //top=NULL表示链栈为空  
  8. }  
  9.   
  10. ls::~ls()  
  11. {  
  12.     node *ptr = NULL;  
  13.   
  14.     while(top != NULL)     //循环释放栈节点空间  
  15.     {  
  16.         ptr = top->next;  
  17.         delete top;  
  18.         top = ptr;  
  19.     }  
  20. }  
  21.   
  22. void ls::push(dataType var)  
  23. {  
  24.     node *ptr = new node;  
  25.   
  26.     ptr->data = var;        //新栈顶存值  
  27.     ptr->next = top;        //新栈顶指向旧栈顶  
  28.   
  29.     top = ptr;              //top指向新栈顶  
  30. }  
  31.   
  32. void ls::pop()  
  33. {  
  34.     node *ptr = top->next;  //预存下一节点的指针  
  35.     delete top;             //释放栈顶空间  
  36.     top = ptr;              //栈顶变化  
  37. }  
  38.   
  39. dataType ls::stackTop()  
  40. {  
  41.     return top->data;       //返回栈顶元素,并不判断栈是否已空  
  42. }  
  43.   
  44. bool ls::isEmpty()  
  45. {  
  46.     return top == NULL;     //栈顶为NULL表示栈空  
  47. }  


4、main.cpp

[cpp] view plaincopyprint?
  1. #include <iostream>  
  2. #include "ls.h"  
  3. using namespace std;  
  4.   
  5. int main()  
  6. {  
  7.     ls exp;  
  8.     int i = 0;  
  9.   
  10.     for(i=0;i<3;++i)  
  11.     {  
  12.         exp.push(i);  
  13.     }  
  14.   
  15.     for(i=0;i<3;i++)  
  16.     {  
  17.         if(!exp.isEmpty())  
  18.         {  
  19.             cout<<exp.stackTop()<<endl;  
  20.             exp.pop();  
  21.         }  
  22.     }  
  23.   
  24.     return 0;  
0 0
原创粉丝点击