博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链栈的c++实现
阅读量:7062 次
发布时间:2019-06-28

本文共 1485 字,大约阅读时间需要 4 分钟。

 
1876人阅读 
(0) 
 

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

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

静态分配内存的。

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

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

 

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

1、文件的组织结构

 

2、ls.h链栈类的说明

[cpp] 
  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] 
  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] 
  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;  

转载于:https://www.cnblogs.com/fangyan5218/p/10618272.html

你可能感兴趣的文章
所有Windows7下游戏的全屏问题
查看>>
UIImage转换成UIView
查看>>
一种专门用于前后端分离的web服务器(JerryServer)
查看>>
Java连接访问Oracle--Connection.setSavepoint()方法使用
查看>>
LeetCode OJ:Maximal Square(最大矩形)
查看>>
抽象工厂 C++实现
查看>>
[KMP]字符串匹配算法
查看>>
Copies in Seconds
查看>>
范内瓦·布什发表《诚如所思》,被信息界公认为是信息科学经典之作
查看>>
javascript基础修炼(10)——VirtualDOM和基本DFS
查看>>
算符优先文法,中缀式求值,栈的典型应用
查看>>
垃圾收集器(一)
查看>>
[转] 随机数是骗人的,.Net、Java、C为我作证
查看>>
第一天
查看>>
VUE基础插值表达式
查看>>
如何在mysql客户端即mysql提示符下执行操作系统命令
查看>>
人月神话读后感
查看>>
Learning Agile software Development
查看>>
window7利用Nexus搭建maven私有服务器
查看>>
java中的多态
查看>>