栈的基本实现(更新中)

  • 2019 年 12 月 17 日
  • 筆記

栈的基本实现(更新中)

参考着严蔚敏的《数据结构(C语言版)》,用自己拿渣的可怜的C语言做了一下午的实现。。。也没能写出来几个。。。就很菜(气哭)。。。

/*-------------------栈的结构体定义---------------------*/  #define STACK_INIT_SIZE 100       // 存储空间初始分配量  #define STACKINCREMENT 10         // 存储空间分配增量    typedef char SElemType; /*SElemType 类型根据实际情况而定,这里假设为int */  typedef struct{      SElemType *top;      SElemType *base;      int stacksize;          /* 栈的最大容量 */  }SqStack;    /*-----------------------------------------------------*/    /*初始化栈,并分配空间*/  Status InitStack(SqStack *S){      //构造一个空栈S      S = (SqStack *)malloc(sizeof(SqStack));      S->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));      if(!S->base)exit(OVERFLOW);     //存储分配失败      S->top = S->base;      S->stacksize = STACK_INIT_SIZE;      return OK;  }   // InitStack    /*若栈存在,则销毁它*/  Status DestroyStack(SqStack *S){      free(S);      if(!S)return ERROR;      return OK;  }    /*将栈清空*/  Status ClearStack(SqStack *S){    }    /*若栈为空,返回true,否则返回false*/  Status StackEmpty(SqStack S){    }    /*若栈存在且非空,用e返回S的栈顶元素*/  Status GetTop(SqStack S, SElemType *e){      //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR      if(S.top == S.base)         return ERROR;    //空栈判断      e = S.top - 1;      return OK;  }   //GetTop    Status Push(SqStack *S, SElemType e){      //插入元素e 为新的栈顶元素      if(S->top - S->base >= S->stacksize){   // 栈满,增加存储空间          S->base = (SElemType *)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemType));          if(!S->base)exit(OVERFLOW);         // 内存已满,存储空间分配失败          S->top = S->base + S->stacksize;          S->stacksize += STACKINCREMENT;     // 最大存储空间增长      }      S->top ++;      S->top = e;      return OK;  }    Status Pop(SqStack *S, SElemType *e){      //若栈不空,则删除S的栈顶元素,用e返回其值,变返回oK;否则返回ERROR      if(S->top == S->base)return ERROR;      e = * -- S->top;      return OK;  }   //pop