标签:生成 运算 结果 保存 png 中缀转后缀 har 直接 char
1、改进1:对中缀转后缀表达式的函数进行改进,生成后缀表达式时,在原来的基础上,各个符号和数字之间增加了空格,比较直观,便于计算:
改进后:
/*中缀表达式转后缀表达式 中缀表达式之间无分割 后缀表达式操作数、操作符之间用空格分割,便于区分不同操作数*/ void infix_to_suffix(char* infix, char* suffix) { int i, k, j=0, top=0; char stack[1000];//存储运算符的栈 for(i=0; infix[i]!=‘\0‘; i++) { if(infix[i] >= ‘0‘ && infix[i] <= ‘9‘) { suffix[j++] = infix[i];//操作数则直接输出 } else { if(i != 0 && infix[i-1] >= ‘0‘ && infix[i-1] <= ‘9‘) { suffix[j++] = ‘ ‘;//操作数后补充空格分割 } if(infix[i] == ‘)‘) { //遇到右括号则一直弹出直到左括号,但左括号不输出 while(stack[top-1] != ‘(‘) { suffix[j++] = stack[--top]; suffix[j++] = ‘ ‘; } top--; } else if(top == 0 || mycmp(stack[top-1], infix[i])) { //栈为空或当前操作符的优先级高于栈顶操作符,当前操作符入栈 stack[top++] = infix[i]; } else { //当前操作符优先级等于或低于栈顶操作符则弹出栈顶 while(!mycmp(stack[top-1], infix[i])) { suffix[j++] = stack[--top]; suffix[j++] = ‘ ‘; if(top == 0) break; } stack[top++] = infix[i];//当前操作符入栈 } } } //补充空格分割 if(suffix[j-1] != ‘ ‘) { suffix[j++] = ‘ ‘; } //如果操作符栈不为空,弹出所有操作符 while(top != 0) { suffix[j++] = stack[--top]; suffix[j++] = ‘ ‘; } suffix[j] = ‘\0‘; }
改进2:优化文件输出 直接将保存结果存到字符串中 一次性输出
改进后:
switch(z){ case 0:{ strcat(str,"+"); break; } case 1:{ strcat(str,"-"); break; } case 2:{ strcat(str,"*"); break; } case 3:{ strcat(str,"/"); break; } case 4:{ strcat(str,"^"); break; } }
2、性能分析
(1)、解10000道题所耗费时间
函数的消耗
可见求解表达式值的时候消耗最大的函数为中缀转后缀表达式函数;
(2)、生成10000道题所消耗的时间
函数的消耗
可见生成题目时消耗最大的函数为题目生成 函数
标签:生成 运算 结果 保存 png 中缀转后缀 har 直接 char
原文地址:https://www.cnblogs.com/szys/p/9026031.html