通用堆栈c语言版本(可以适应任何类型)
来源:互联网 发布:建立数据库的表结构 编辑:程序博客网 时间:2024/05/22 01:37
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #define OK 0;
- #define ERROR -1
- #define OVERFLOW -2
- #define YES 1
- #define NO 0
-
- #define STACK_INIT_SIZE 100
- #define STACK_INCREMENT 10
-
-
- typedef int Status;
- typedef int TElemType;
- typedef BiTreeLk SElemType;
-
-
-
- typedef struct
- {
- SElemType *base;
- SElemType *top;
- int stacksize;
- }SqStack;
-
-
- Status InitStack(SqStack &S)
- {
- S.base = (SElemType *)malloc(sizeof(SElemType)*STACK_INIT_SIZE);
- if(!S.base) exit(OVERFLOW);
- S.top = S.base;
- S.stacksize = STACK_INIT_SIZE;
- }
-
-
- Status GetTop(SqStack &S,SElemType &e)
- {
- if(S.top==S.base)
- return ERROR;
- e = *(S.top-1);
- return OK;
- }
-
-
- Status Push(SqStack &S,SElemType e)
- {
- if(S.top-S.base>=S.stacksize)
- {
- S.base= (SElemType *)realloc(S.base, sizeof(SElemType)*(S.stacksize+STACK_INCREMENT));
- if(!S.base)
- return ERROR;
- S.top = S.base+S.stacksize;
- S.stacksize += STACK_INCREMENT;
- }
- *S.top++ = e;
- return OK;
- }
-
-
- Status Pop(SqStack &S,SElemType &e)
- {
- if(S.top==S.base)
- return ERROR;
- S.top--;
- e = *S.top; return OK;
- }
-
-
- Status StackEmpty(SqStack &S)
- {
- if(S.base == S.top)
- return YES;
- return NO;
- }