栈的基本操作

  1. #include<malloc.h>  
  2. #include<string.h>  
  3. #include<stdio.h>  
  4.  
  5. #define OVERFLOW        -1  
  6. #define STACK_INIT_SIZE 10  
  7. #define STACKINCREMENT   2  
  8. #define OK               1  
  9. #define ERROR            0  
  10. #define TRUE             1  
  11. #define FALSE            0  
  12.   
  13. typedef int SElemType;  
  14. typedef int Status;   
  15.   
  16.   
  17.   
  18. struct SqStack  
  19. {  
  20.     SElemType *base;  
  21.     SElemType *top;  
  22.     int stacksize;  
  23. };  
  24.   
  25. Status InitStack(SqStack &S);  
  26. Status DestoryStack(SqStack &S);  
  27. Status ClearStack(SqStack &S);  
  28. Status StackEmpty(SqStack S);  
  29. int StackLength(SqStack S);  
  30. Status GetTop(SqStack S, SElemType &e);  
  31. Status Push(SqStack &S, SElemType e);  
  32. Status Pop(SqStack &S, SElemType &e);  
  33. Status StackTraverse(SqStack S, Status(*visit)());  
  34.   
  35. Status InitStack(SqStack &S)  
  36. {  
  37.     S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));  
  38.     if(!S.base) return OVERFLOW;  
  39.     S.top = S.base;  
  40.     S.stacksize = STACK_INIT_SIZE;  
  41.     return OK;  
  42. }  
  43.   
  44. Status DestoryStack(SqStack &S)  
  45. {  
  46.     free(S.base);  
  47.     S.base = NULL;  
  48.     S.top = NULL;  
  49.     S.stacksize = 0;  
  50.     return OK;  
  51. }  
  52.   
  53. Status ClearStack(SqStack &S)  
  54. {  
  55.     S.top = S.base;  
  56.     return OK;  
  57. }  
  58.   
  59. Status StackEmpty(SqStack S)  
  60. {  
  61.     if(S.top == S.base)  
  62.         return TRUE;  
  63.     else  
  64.         return FALSE;  
  65. }  
  66.   
  67. int StackLength(SqStack S)  
  68. {  
  69.     return S.top - S.base;  
  70. }  
  71.   
  72. Status GetTop(SqStack S,SElemType &e)  
  73. {  
  74.     if(S.top == S.base) return ERROR;  
  75.     e = *(S.top -1);  
  76.     return OK;  
  77. }  
  78.   
  79. Status Push(SqStack &S, SElemType e)  
  80. {  
  81.     if(S.top - S.base >= S.stacksize)  
  82.     {  
  83.         S.base = (SElemType *)realloc(S.base,(S.stacksize + STACKINCREMENT)*sizeof(SElemType));  
  84.         if(!S.base) return OVERFLOW;  
  85.         S.top = S.base + S.stacksize;  
  86.         S.stacksize += STACKINCREMENT;   
  87.     }  
  88.     *S.top++ = e;  
  89.     return OK;  
  90. }  
  91.   
  92. Status Pop(SqStack &S, SElemType &e)  
  93. {  
  94.     if(S.top == S.base) return ERROR;  
  95.     e = * --S.top;  
  96.     return OK;  
  97. }  
  98.   
  99. Status StackTraverse(SqStack S, Status(* visit)(SElemType))  
  100. {  
  101.     while(S.top > S.base)  
  102.         visit(*S.base++);  
  103.     printf("\n");  
  104.     return OK;  
  105. }  
  106.   
  107. Status visit(SElemType e)  
  108. {  
  109.     printf("%d ", e);  
  110.     return OK;  
  111. }  
  112. int main(){
  113.   .....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值