zoukankan      html  css  js  c++  java
  • 表达式求值——栈实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 100
    char stack[MAX];
    int top=-1;
    
    void fun( char a[],char b[])
    {
        int i,len,j;
        len=strlen(a);
        j=-1;
        for(i=0;i<len;i++)
        {
            switch(a[i])
            {
            case '(':stack[++top]='(';break;            
            
            case '-':
            case '+':while(top>=0&&stack[top]!='(')   //当遇到"+-"时,到"("前的运算符全部出栈 
                          b[++j]=stack[top--];
                    stack[++top]=' ';                //运算符进栈前先进去一个' ' 
                    stack[++top]=a[i];               //运算符进栈 
                        break;
            
            case '*':
            case '/':while(top>=0&&stack[top]!='('&&stack[top]!='+'&&stack[top]!='-')
                         b[++j]=stack[top--];        //当遇到"*/"时,到"( + -"前的运算符全部出栈 
                    stack[++top]=' ';
                    stack[++top]=a[i];
                    
                    break;
            case')':while(stack[top]!='(')
                        b[++j]=stack[top--];
                    top--;
                    break;
            default:
                    b[++j]=a[i];
                    if(a[i+1]<'0'||a[i+1]>'9')
                    {
                            b[++j]=' ';
                    }
            }      
        }
        while(top>=0)
            b[++j]=stack[top--];
        b[++j]='';
    //    for(i=0;i<=j;i++)
    //        printf("%c",b[i]);
    }
    int compvalue(char exp[])
    {
        int i,len,sum=0,c;
        top=-1;
        int digit[MAX];
        len=strlen(exp);
    
        for(i=0;i<len;i++)
        {
            switch( exp[i] )
            {
            case' ': break;
            case'+': sum=digit[top]+digit[top-1];
                    digit[--top]=sum;
                    break;
            case'-':sum=digit[top-1]-digit[top];
                    digit[--top]=sum;
                
                    break;
            case'*':sum=digit[top]*digit[top-1];
                    digit[--top]=sum;
                    break;
            case'/':sum=digit[top-1]/digit[top];
                    digit[--top]=sum;
                    break;
            default:
                    c=0;
                    while(exp[i]>='0'&&exp[i]<='9')
                    {    
                        c=c*10+exp[i]-'0';
                        i++;
                    }
                    digit[++top]=c;
            }        
        }
        return digit[0];
    }
    int main()
    {
        char a[MAX],b[MAX];
        scanf("%s",a);
        fun(a,b);
        printf("%s
    ",b);
        printf("%d
    ",compvalue(b));
        system("pause");
        return 0;
    }
    

  • 相关阅读:
    java----使用socket模拟简单的http请求服务器,响应简单的文件请求操作
    Java实现的断点续传功能
    C 语言——分支和跳转
    C 语言——嵌套循环例子
    C 语言——循环
    C 语言——运算符、表达式和语句
    C 语言——字符串和格式化输入/输出
    C 语言——基础概论
    C 语言——开篇
    IDEA的安装教程
  • 原文地址:https://www.cnblogs.com/cnyali/p/4163915.html
Copyright © 2011-2022 走看看