zoukankan      html  css  js  c++  java
  • 链栈的c++实现

     1876人阅读 评论(0) 收藏 举报

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

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

    静态分配内存的。

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

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

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

    1、文件的组织结构

    2、ls.h链栈类的说明

    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链栈类成员函数的定义

    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

    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;  
  • 相关阅读:
    招财宝和余额宝哪个好?注意招财宝三大漏洞
    JavaScript eval() Function
    面向对象设计七大原则
    Web开发应该注意的问题
    表格内容排序(js实现)
    Ruby on Rails Tutorial 第六章 用户模型
    Ruby on Rails Tutorial 第五章 完善布局
    一万小时定律的数学解释
    数据抓取的艺术(三)
    数据抓取的艺术(二)
  • 原文地址:https://www.cnblogs.com/fangyan5218/p/10618272.html
Copyright © 2011-2022 走看看