顺序栈模板

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int status;
typedef int elemtype;
typedef struct node{
      elemtype *base;
      elemtype *top;
      int size;
}sqstack;
status initstack(sqstack &s){//初始化栈
     s.base=(elemtype *)malloc(LIST_INIT_SIZE*sizeof(elemtype));
     if(!s.base)
        exit(OVERFLOW);
        s.top=s.base;
        s.size=LIST_INIT_SIZE;
        return OK;
}
status get_top(sqstack s,elemtype &e){//获得栈顶元素
     if(s.top==s.base)
     return ERROR;
     e=*(s.top-1);
     return OK;
}
status push(sqstack &s,elemtype e){//向栈中输入元素
     if(s.top-s.base>=s.size){
        s.base=(elemtype *)realloc(s.base,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(elemtype));
        if(!s.base)
             exit(OVERFLOW);
             s.top=s.base+s.size;
             s.size+=LISTINCREMENT;
     }
     *s.top++=e;
     return OK;
}
status pop(sqstack &s,elemtype &e){//删除栈顶元素
      if(s.top==s.base)
      return ERROR;
      e=*--s.top;
      return OK;
}
status empty(sqstack &s){//判断栈是否为空
      if(s.base==s.top)
      return TRUE;

      else
      return FALSE;
}
status clearstack(sqstack &s){//将栈清空
   s.top=s.base;
   return OK;
   /* elemtype e;
         while(!empty(s)){
           pop(s,e);
         }*/
}
void get_lenght(sqstack s,int &len){//获得栈的长度
   len=s.top-s.base;
}
void destroy(sqstack &s){//销毁栈
    free(s.base);
    s.base=s.top=NULL;
    s.size=0;

}
int main(){
        sqstack s;
        initstack(s);
        for(int i=2;i<=5;i++){
           push(s,i);
        }
        elemtype e;
        int len;
        get_lenght(s,len);//获得栈的长度
        destroy(s);//销毁栈
        printf("%d
",len);
     clearstack(s);//清空栈
        while(!empty(s)){
            get_top(s,e);
             printf("%d
",e);//从栈顶依次输出栈
             pop(s,e);
        }
        return 0;
}
原文地址:https://www.cnblogs.com/13224ACMer/p/5036243.html