中缀转后缀,前缀,后缀转前缀 下载本文

内容发布更新时间 : 2024/6/26 21:24:59星期一 下面是文章的全部内容请认真阅读。

#include #include #include #include #include #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<data; PreVisit(BT->lchild); PreVisit(BT->rchild); } }

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]=\