#define OK 1 #define TRUE 1 #define ERROR 0 #define FALSE 0 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define Status int #define SElemType int #include "stdio.h" #include "malloc.h" /* 栈的操作 SElemType 栈的数据类型 Status InitStatck(SqStack &s) 初始化栈 Status DestoryStatck(SqStack &s) 销毁栈 Status ClearStack(SqStack &s) 清除栈 bool StackEmpty(SqStack s) 栈是否为空 int StackLength(SqStack s) 栈的长度 Status GetTop(SqStack s,SElemType &e) 得到栈顶 Status Push(SqStack &s,SElemType e) 压栈 Status Pop(SqStack &s,SElemType &e) 出栈*/ typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; /*================================== 功能: 初始化栈 参数: SqStack 返回:OVERFLOW or TRUE; //=================================*/ Status InitStatck(SqStack &s){ s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!s.base) { return OVERFLOW; } s.top=s.base; s.stacksize=STACK_INIT_SIZE; return OK; } /*================================== 功能: 销毁栈 参数: SqStack 返回: OK; //=================================*/ Status DestoryStatck(SqStack &s){ s.top=s.top; s.stacksize=0; free(s.top); free(s.base); return OK; } /*================================== 功能: 清除栈 参数: SqStack 返回: OK; //=================================*/ Status ClearStack(SqStack &s){ s.top=s.base; s.stacksize=STACK_INIT_SIZE; return OK; } /*================================== 功能: 判断栈是否为空 参数: SqStack 返回: TRUE or FALSE //=================================*/ bool StackEmpty(SqStack s){ if(s.base==s.top) { return TRUE; } else { return FALSE; } } /*================================== 功能: 得到栈的长度 参数: SqStack 返回: int 栈的长度 //=================================*/ int StackLength(SqStack s){ if(s.base=s.top) { return ERROR; } else { return (s.top-s.base); } } /*================================== 功能: 得到栈的TOP 参数: SqStack ,SElemType 备注: 仅仅得到数据,不出栈; 返回: SElemType类型的数据 //=================================*/ Status GetTop(SqStack s,SElemType &e){ if(StackEmpty(s)) { printf("this statck is empty !/n"); return ERROR; } else { e=*(--s.top); return OK; } } /*================================== 功能: 压栈 参数: SqStack ,SElemType 返回: ERROR OR OK //=================================*/ Status Push(SqStack &s,SElemType e){ if(StackLength(s)==STACK_INIT_SIZE) { SElemType *tem; tem=(SElemType*)realloc(s.base, (STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType)); if(!tem) { return ERROR; } s.base=tem; s.top=s.base+STACK_INIT_SIZE; s.stacksize+=STACKINCREMENT; *(s.top++)=e; return OK; } else { *(s.top++)=e; return OK; } } /*================================== 功能: 出栈 参数: SqStack ,SElemType 返回: ERROR OR OK //=================================*/ Status Pop(SqStack &s,SElemType &e){ if(StackEmpty(s)) { printf("this statck is empty !/n"); return ERROR; } else { e=*(--s.top); return OK; } } //void StackTraverse(SqStack,void Fun()){ void main(){ SqStack statck; InitStatck(statck); for(int i=0;i<5;i++) { if(Push(statck,i)) { printf("%d is push in this statck success!/n",i); } else { printf("/n/thappen a error/n/t"); } } int tem; printf("now i will print this top of statck !/n"); GetTop(statck,tem); printf("%d is top of this statck/n",tem); }