课程设计魔王语言
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define INFEASIBLE -2
#define NULL 0
typedef int Status;
//1、栈类型
typedef char SElemType;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//栈的基本操作和实现
Status InitStack(SqStack &S)
{
//构造空栈 S
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)exit(OVERFLOW); //存储分配失败
S.top=S.base; //空栈
S.stacksize=STACK_INIT_SIZE;
return(OK);
}//InitStack
Status Push(SqStack &S, SElemType e){
//插入 e 为栈顶元素
if(S.top-S.base==S.stacksize){//栈满则应重新分配空间
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=(S.base+S.stacksize);//使得 S.top 重新指向栈顶,因 realloc
S.stacksize+=STACKINCREMENT;
}
*S.top++=e; //top 指向待插入位置
return(OK);
}//Push