内容发布更新时间 : 2024/11/16 4:52:08星期一 下面是文章的全部内容请认真阅读。
#include
using namespace std;
#define MAX 100
static string expr; static int pos;
static jmp_buf errjb;
struct BiTree { string data; BiTree* lchild; BiTree* rchild; };
BiTree* T_MulDiv(); BiTree* F_ExpNum();
BiTree* E_AddSub() { if(expr[pos]=='+'||expr[pos]=='-') { BiTree* ret=new BiTree; ret->data=expr[pos--]; ret->rchild=E_AddSub(); ret->lchild=T_MulDiv(); return ret; } return T_MulDiv(); }
BiTree* T_MulDiv() { if(expr[pos]=='*'||expr[pos]=='/') { BiTree* ret=new BiTree; ret->data=expr[pos--]; ret->rchild=T_MulDiv(); ret->lchild=F_ExpNum();
return ret; } return F_ExpNum(); }
BiTree* F_ExpNum() { BiTree* ret=new BiTree; ret->data=\ if(isalnum(expr[pos])) { ret->data=expr[pos--]; ret->lchild=ret->rchild=0; return ret; } if(pos<0) {
cout<<\出错!未预期的结尾!\ longjmp(errjb,1); } if(expr[pos]=='+'||expr[pos]=='-'||expr[pos]=='*'||expr[pos]=='/') { return E_AddSub(); } cout<<\出错!非法字符!\ longjmp(errjb,1); }
void PreVisit(BiTree* BT) { if(BT) { cout<
typedef struct { char elements[MAX]; int top; }
STACK_char; typedef struct { double elements[MAX]; int top; }
STACK_num;
void MakeNull_char(STACK_char *S){ (*S).top=MAX; }
char Top_char(STACK_char *S){ return (*S).elements[(*S).top]; }
char PopAddTop_char(STACK_char *S){ (*S).top=(*S).top+1; return (*S).elements[(*S).top-1]; }
void Push_char(char x,STACK_char *S){ (*S).top=(*S).top-1; (*S).elements[(*S).top]=x; }
void MakeNull_num(STACK_num *S){ (*S).top=MAX; }
double Top_num(STACK_num *S){ return (*S).elements[(*S).top]; }
double PopAddTop_num(STACK_num *S){ (*S).top=(*S).top+1; return (*S).elements[(*S).top-1]; }
void Push_num(double x,STACK_num *S){ (*S).top=(*S).top-1;
(*S).elements[(*S).top]=x; }
int compare(char x,char y){ if ((x=='*'||x=='/'||x=='%')&&(y=='+'||y=='-')) return 1; else return 0; }
void change(char *a,char *b) { char num[12]=\