码迷,mamicode.com
首页 > 其他好文 > 详细

程序改进与性能分析

时间:2018-05-11 23:57:39      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:生成   运算   结果   保存   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!