#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int Status;
#define TRUE 1;
#define FALSE 0;
#define OK 1;
#define ERROR -1;
#define INFEASBIOLE -2;
#define OVERFLOW 0;
#define STACK_INT_SIZE 100
#define STACKINCREAMENRT 10
//数据结构
typedef struct
{
SElemtype *base;
SElemtype *top;
int stacksize;
} SqStack;
//基本操作
Status InitStack(SqStack &S)
{
//构造空栈
S.base=(*SElemtype)malloc(STACKSIZE*sizeof(SElemtype));
if(!S.base)
exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestroyStack(SqStack &S)
{
//销毁栈
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return OK;
}
Status ClearStack(SqStack &S)
{
//把栈清空
S.top=S.base;
return OK;
}
Status StackEmpty(SqStack &S)
{
//判断栈是否为空
return (S.top==S.base);
}
int StackLength(SqStack S)
{
//返回栈的长度
return S.top-S.base;
}
Status GetTop(SqStack S,SElemtyoe &e)
{
//用e返回栈顶元素
if(S.base==S.top)
return ERROR;
*e=*(S.top-1);
return OK;
}
Status Push(SqStack &S,SElemtype e)
{
//插入元素e
if(S.top-S.base>=S.stacksize)
{
S.base=(*SElemtype*)realloc((S.stacksize+STACKINCREAMENRT)*sizeof(SElemtype));
if(!S.base)
return OVERFLOW;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREAMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemtype &e)
{
//删除元素e并返回
if(S.top==S.base)
return ERROR;
*e=*--S.top;
return OK;
}
Status StackTraverse(SqStack S,Status(*visit)())
{
//遍历操作
while(S.top>S.base)
visit(*S.base++);
printf("\n");
return OK;
}
Status visit(SElemtype e)
{
//visit函数
printf("%d ",e);
return OK;
}
int main()
{
printf("Hello world!\n");
return 0;
}
#include <stdlib.h>
#include <malloc.h>
typedef int Status;
#define TRUE 1;
#define FALSE 0;
#define OK 1;
#define ERROR -1;
#define INFEASBIOLE -2;
#define OVERFLOW 0;
#define STACK_INT_SIZE 100
#define STACKINCREAMENRT 10
//数据结构
typedef struct
{
SElemtype *base;
SElemtype *top;
int stacksize;
} SqStack;
//基本操作
Status InitStack(SqStack &S)
{
//构造空栈
S.base=(*SElemtype)malloc(STACKSIZE*sizeof(SElemtype));
if(!S.base)
exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status DestroyStack(SqStack &S)
{
//销毁栈
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return OK;
}
Status ClearStack(SqStack &S)
{
//把栈清空
S.top=S.base;
return OK;
}
Status StackEmpty(SqStack &S)
{
//判断栈是否为空
return (S.top==S.base);
}
int StackLength(SqStack S)
{
//返回栈的长度
return S.top-S.base;
}
Status GetTop(SqStack S,SElemtyoe &e)
{
//用e返回栈顶元素
if(S.base==S.top)
return ERROR;
*e=*(S.top-1);
return OK;
}
Status Push(SqStack &S,SElemtype e)
{
//插入元素e
if(S.top-S.base>=S.stacksize)
{
S.base=(*SElemtype*)realloc((S.stacksize+STACKINCREAMENRT)*sizeof(SElemtype));
if(!S.base)
return OVERFLOW;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREAMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemtype &e)
{
//删除元素e并返回
if(S.top==S.base)
return ERROR;
*e=*--S.top;
return OK;
}
Status StackTraverse(SqStack S,Status(*visit)())
{
//遍历操作
while(S.top>S.base)
visit(*S.base++);
printf("\n");
return OK;
}
Status visit(SElemtype e)
{
//visit函数
printf("%d ",e);
return OK;
}
int main()
{
printf("Hello world!\n");
return 0;
}