栈的实现

隐藏行号 复制代码 .h
  1. #ifndef __STACK_H
    
  2. #define __STACK_H
    
  3. /*array stack*/
    
  4. namespace dskit
    
  5. {
    
  6.     struct StackRecord;
    
  7.     typedef struct StackRecord* Stack;
    
  8.     
    
  9.     #ifndef NULL
    
  10.     #define NULL (0)
    
  11.     #endif
    
  12.  
  13.     typedef char ElementType;
    
  14.     typedef unsigned size_t; 
    
  15.     
    
  16.     bool IsEmpty(Stack s);
    
  17.     bool IsFull(Stack s);
    
  18.     Stack CreateStack(size_t MaxElements);
    
  19.     void DisposeStack(Stack s);
    
  20.     bool Push(ElementType x, Stack s);
    
  21.     ElementType Pop(Stack s);
    
  22.     ElementType Top(Stack s);
    
  23.  
  24.     #define EmptyTOS (-1)
    
  25.     #define MinStackSize (5)
    
  26.  
  27.     struct StackRecord
    
  28.     {
    
  29.         int Capacity;
    
  30.         int TopOfStack;
    
  31.         ElementType* Array;
    
  32.     };
    
  33. }
    
  34.  
  35. #endif
    
  36.  
<script language="javascript"> function CopyCode(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i
隐藏行号 复制代码 .cpp
  1. #include "stack.h"
    
  2. #include 
         
         
    
         
         
  3. #include 
         
         
    
         
         
  4.  
  5. bool dskit::IsEmpty(Stack s)
    
  6. {
    
  7.     return s->TopOfStack == EmptyTOS;
    
  8. }
    
  9.  
  10. bool dskit::IsFull(Stack s)
    
  11. {
    
  12.     return s->TopOfStack == s->Capacity;
    
  13. }
    
  14.  
  15. dskit::Stack dskit::CreateStack(size_t MaxElements)
    
  16. {
    
  17.     if(MaxElements < MinStackSize)
    
  18.         MaxElements = MinStackSize;
    
  19.     
    
  20.     Stack S;
    
  21.     
    
  22.     S = (struct StackRecord*)malloc(sizeof(struct StackRecord));
    
  23.     if(NULL == S)
    
  24.         return NULL;
    
  25.  
  26.     S->Array = (ElementType*) malloc(sizeof(ElementType) * MaxElements );
    
  27.     if(NULL == S->Array)
    
  28.     {
    
  29.         free(S);
    
  30.         return NULL;
    
  31.     }
    
  32.  
  33.     S->Capacity = MaxElements;
    
  34.     S->TopOfStack = EmptyTOS;
    
  35.  
  36.     return S;
    
  37. }
    
  38.  
  39. void dskit::DisposeStack(Stack s)
    
  40. {
    
  41.     if(NULL != s)
    
  42.     {
    
  43.         free(s->Array);
    
  44.         free(s);
    
  45.     }
    
  46. }
    
  47.  
  48. bool dskit::Push(ElementType x, Stack s)
    
  49. {
    
  50.     if(IsFull(s))
    
  51.         return false;
    
  52.     else
    
  53.     {
    
  54.         printf("%c was pushed./n", x);
    
  55.         return s->Array[++s->TopOfStack] = x;    
    
  56.     }
    
  57.         
    
  58. }
    
  59.  
  60. dskit::ElementType dskit::Pop(Stack s)
    
  61. {
    
  62.     if(!IsEmpty(s))
    
  63.         return s->Array[s->TopOfStack--];
    
  64.     else
    
  65.     {
    
  66.         printf("Pop error/n");
    
  67.         exit(-1);
    
  68.     }
    
  69. }
    
  70.  
  71. dskit::ElementType dskit::Top(Stack s)
    
  72. {
    
  73.     if(!IsEmpty(s))
    
  74.         return s->Array[s->TopOfStack];
    
  75.     else
    
  76.     {
    
  77.         printf("Top error/n");
    
  78.         exit(-1);
    
  79.     }
    
  80.  
  81. }
    
  82.  
  83. /*
    
  84. int main(int argc, char* argv[])
    
  85. {
    
  86.     dskit::Stack s = dskit::CreateStack(50);
    
  87.  
  88.     dskit::Push(12, s);
    
  89.     dskit::Push(13, s);
    
  90.     dskit::Push(14, s);
    
  91.     
    
  92.     std::cout << dskit::Pop(s) << '/t' << std::endl;
    
  93.     std::cout << dskit::Pop(s) << '/t' << std::endl;
    
  94.     std::cout << dskit::Pop(s) << '/t' << std::endl;
    
  95.  
  96.     dskit::DisposeStack(s);
    
  97. }
    
  98. */
    
  99.  
<script language="javascript"> function CopyCode(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值