• 栈的几种操作(C语言)


    描述:栈的几种操作,可以在纯C编译器中运行

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 
      4 #define TRUE 1
      5 #define FALSE 0
      6 #define OK 1
      7 #define ERROR 0
      8 #define OVERFLOW -1
      9 #define STACK_INIT_SIZE 100
     10 #define STACKINCREMENT 10
     11 typedef int ElemType;
     12 typedef int Status;
     13 
     14 typedef struct{
     15     ElemType *base;
     16     ElemType *top;
     17     int stacksize;
     18 }SqStack;
     19 
     20 //构建一个空栈
     21 Status InitStack(SqStack *S)
     22 {
     23     S->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
     24     if(!S->base)
     25     {
     26         exit(OVERFLOW);
     27     }
     28     S->top = S->base;
     29     S->stacksize = STACK_INIT_SIZE;
     30 
     31     return OK;
     32 }
     33 
     34 //销毁一个栈
     35 Status DestoryStack(SqStack *S)
     36 {
     37     S->top = NULL;
     38     S->stacksize = 0;
     39     free(S->base);
     40 
     41     return OK;
     42 
     43 }
     44 
     45 //清空一个栈
     46 Status ClearStack(SqStack *S)
     47 {
     48     S->top = S->base;
     49     
     50     return OK;
     51 }
     52 
     53 //判断栈是否为空
     54 Status EmptyStack(SqStack S)
     55 {
     56     if(S.top == S.base)
     57     {
     58         return TRUE;
     59     }
     60     else
     61     {
     62         return FALSE;
     63     }
     64 }
     65 
     66 //返回栈长度
     67 ElemType LengthStack(SqStack S)
     68 {
     69     return S.top - S.base;
     70 }
     71 
     72 //返回栈顶元素
     73 ElemType GetTop(SqStack S)
     74 {
     75     if(S.base == S.top)
     76     {
     77         return FALSE;
     78     }
     79     else
     80     {
     81         return *(S.top - 1);
     82     }
     83 }
     84 
     85 //入栈
     86 Status Push(SqStack *S, ElemType e)
     87 {
     88     if(S->top - S->base >= STACK_INIT_SIZE)
     89     {
     90         S->base = (ElemType *)realloc(S->base, (S->stacksize + STACKINCREMENT)*sizeof(ElemType));
     91         if(!S->base)
     92         {
     93             exit(OVERFLOW);
     94         }
     95         S->top = S->base + STACK_INIT_SIZE;
     96         S->stacksize = STACK_INIT_SIZE + STACKINCREMENT;
     97     }
     98     *S->top = e;
     99     S->top++;
    100 
    101     return OK;
    102 }
    103 
    104 //出栈
    105 Status Pop(SqStack *S)
    106 {
    107     if(S->top == S->base)
    108     {
    109         return ERROR;
    110     }
    111     else
    112     {
    113         S->top--;
    114         return *S->top;
    115     }
    116 }
    117 
    118 //遍历栈
    119 Status StackTraverse(SqStack S)
    120 {
    121     ElemType *p = S.top;
    122     
    123     if(S.base == NULL)
    124     {
    125         return ERROR;
    126     }
    127     if(p == S.base)
    128     {
    129         printf("the stack is empty.
    ");
    130     }
    131     while(p > S.base)
    132     {
    133         p--;
    134         printf("%d", *p);
    135     }
    136 
    137     return OK;
    138 }

    PS:参考了别人的代码(https://blog.csdn.net/liujiuxiaoshitou/article/details/53394888),稍微做了点修改,可以在纯C编译器中运行,写下来之后对于指针和结构体有了更深入的认识,另C语言中重复定义会报错

  • 相关阅读:
    上传图片时判断图片的模式GRB或CMYK
    正则表达式的6中使用
    SqlServer获得存储过程的返回值
    从零学习wcf(一)
    等比例缩小图片
    模仿Jquery Tab
    jquery ajax调用一般处理程序
    一种感觉
    "敏捷软件开发" 读书笔记叙
    荣迁贵宝地
  • 原文地址:https://www.cnblogs.com/OoycyoO/p/8783628.html
Copyright © 2020-2023  润新知