内容发布更新时间 : 2025/8/22 17:12:33星期一 下面是文章的全部内容请认真阅读。
}
while(t!=b);
a[i]='\\0';//完成反序后缀式的逆向 T=create(T,a); //create()函数创建二叉链表
postordertraverse(T);//后序遍历进行计算 printf(\输出结果
return 0;
} //main
3.2其它函数的具体实现
char *convert();
//将运算式转换成逆后缀序列,并将该序列作为返回值; 首先输入运算式,判断是否为数字,将数字存入数组的数值域,并用符号代替数值,产生新的用符号表示的运算式。
然后用字符优先算法将算式转换为逆后缀式,将数组首地址传回给主函数。 并且在输入不合法时给予错误提示。
struct node *create(struct node *T,char d[]); //建立二叉链表,并返回根结点 void postordertraverse(struct node *e);
//进行后序遍历,运用了递归的思想,实际上调用operation函数进行计算
float operation(float a,float b,char c);
//四则运算函数,主要实现运算功能
int in(char c);
//判断是否为运算符,是运算符返回1
部分函数的代码如下: (1)create函数
struct node *create(struct node *T,char d[])
{ //建立二叉链表,并返回根结点 int i;
if(d[w]>='A'&&d[w]<='Z') {T->data=d[w];
for(i=0;array[i].sign!='\\0';i++) {if(array[i].sign==d[w])
{ T->number=array[i].number;break;} }
T->left=NULL; T->right=NULL; w++;
}
else{
if(flag==0)flag=1; else
T=(struct node *)malloc(sizeof(struct node ));
(T)->data=d[w]; w++;
T->left=(struct node *)malloc(sizeof(struct node ));
T->right=(struct node *)malloc(sizeof(struct node ));
T->right=create((T)->right,d); T->left=create((T)->left,d); }
return T;
} //c