程序改进与性能分析

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道题所消耗的时间

函数的消耗

可见生成题目时消耗最大的函数为题目生成 函数

猜你喜欢

转载自www.cnblogs.com/szys/p/9026031.html