栈的顺序存储结构——顺序栈 图解和代码实现

栈的顺序存储结构称为顺序栈

 

先看下顺序栈的图片:


 

SeqStack.h

  1. //SeqStack.h  
  2. #ifndef SEQSTACK_H  
  3. #define SEQSTACK_H  
  4.   
  5. const int StackSize=10;  //10只是示例性的数据,可以根据实际问题具体定义  
  6.   
  7. template <class T>       //定义模板类SeqStack  
  8. class SeqStack  
  9. {  
  10. public:  
  11.     SeqStack( ) ;            //构造函数,栈的初始化  
  12.     ~SeqStack( );            //析构函数  
  13.     void Push(T x);          //将元素x入栈  
  14.     T Pop( );                //将栈顶元素弹出  
  15.     T GetTop( );             //取栈顶元素(并不删除)  
  16.     bool Empty( );           //判断栈是否为空  
  17. private:  
  18.     T data[StackSize];      //存放栈元素的数组  
  19.     int top;                //栈顶指针,指示栈顶元素在数组中的下标  
  20. };  
  21.   
  22. #endif  



SeqStack.cpp


  1. //SeqStack.cpp  
  2. #include "SeqStack.h"  
  3.   
  4. /* 
  5.  * 前置条件:栈不存在 
  6.  * 输    入:无 
  7.  * 功    能:栈的初始化 
  8.  * 输    出:无 
  9.  * 后置条件:构造一个空栈 
  10.  */  
  11.   
  12. template <class T>  
  13. SeqStack<T>::SeqStack( )  
  14. {  
  15.     top=-1;  
  16. }  
  17.   
  18. /* 
  19.  * 前置条件:栈已存在 
  20.  * 输    入:无 
  21.  * 功    能:销毁栈 
  22.  * 输    出:无 
  23.  * 后置条件:释放栈所占用的存储空间 
  24.  */  
  25.   
  26. template <class T>  
  27. SeqStack<T>::~SeqStack( )  
  28. {  
  29.   
  30. }   
  31.   
  32. /* 
  33.  * 前置条件:栈已存在 
  34.  * 输    入:元素值x 
  35.  * 功    能:在栈顶插入一个元素x 
  36.  * 输    出:如果插入不成功,抛出异常 
  37.  * 后置条件:如果插入成功,栈顶增加了一个元素 
  38.  */  
  39.   
  40. template <class T>   
  41. void SeqStack<T>::Push(T x)  
  42. {  
  43.     if (top== StackSize-1) throw "上溢";  
  44.     top++;  
  45.     data[top]=x;  
  46. }  
  47.   
  48. /* 
  49.  * 前置条件:栈已存在 
  50.  * 输    入:无 
  51.  * 功    能:删除栈顶元素 
  52.  * 输    出:如果删除成功,返回被删元素值,否则,抛出异常 
  53.  * 后置条件:如果删除成功,栈顶减少了一个元素 
  54.  */       
  55.   
  56. template <class T>  
  57. T SeqStack<T>::Pop( )  
  58. {   
  59.     T x;  
  60.     if (top==-1) throw "下溢";  
  61.     x=data[top--];  
  62.     return x;  
  63. }  
  64.   
  65. /* 
  66.  * 前置条件:栈已存在 
  67.  * 输    入:无 
  68.  * 功    能:读取当前的栈顶元素 
  69.  * 输    出:若栈不空,返回当前的栈顶元素值 
  70.  * 后置条件:栈不变 
  71.  */  
  72.   
  73. template <class T>   
  74. T SeqStack<T>::GetTop( )  
  75. {  
  76.     if (top!=-1)    
  77.     return data[top];  
  78. }  
  79.   
  80. /* 
  81.  * 前置条件:栈已存在 
  82.  * 输    入:无 
  83.  * 功    能:判断栈是否为空 
  84.  * 输    出:如果栈为空,返回1,否则,返回0 
  85.  * 后置条件:栈不变 
  86.  */  
  87.   
  88. template <class T>   
  89. bool SeqStack<T>::Empty( )  
  90. {  
  91.     if(top==-1) return 1;  
  92.     else return 0;  
  93. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值