#include<malloc.h>
#include<stdio.h>
#include<string.h>
#include<cstring>
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char* SElemType;
typedef int Status;
struct SqStack //以字符指针为栈元素,栈结构类似100行500列的结构
{
SElemType *base;
SElemType *top;
int stacksize;
};
Status InitStack(SqStack &S)
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base) return ERROR;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack &S, SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top=(char *)malloc(500*sizeof(char)); //假设每一个计算的结果不超过500位
strcpy(*S.top,e);
S.top++;
return OK;
}
Status Pop(SqStack &S,SElemType e)
{
if(S.top==S.base) return ERROR;
S.top--;
strcpy(e,*S.top);
S.stacksize--;
return OK;
}
Status StackTraverse(SqStack S)
{
SElemType *p = (SElemType *)malloc(sizeof(SElemType));
p =S.top;
if(S.base==S.top)printf("The Stack is Empty!");
else
{
printf("The Stack is:\n");