【中缀表达式】
    类似这样 ((3+4)5)才是一个完整的中缀表达式,就是说括号表示优先级,给计算机计算的时候先计算括号内的,同时括号内也可以嵌套,因此括号里的括号中的运算优先级更高
    【后缀表达式】
    如果是(3+4)
    5这样的形式,首先先加上外括号
    表达式分为运算符和运算数,运算数即3、4、5,运算符就是()、+、-/(减除要注意左右操作数)
    并且运算时运算符只招相邻的两个运算数
    【中缀转后缀表达式】 结果:34+5

    第一步((3+4)5)—>(34+5)
    第二步(34+5)此时34+是的左操作数,5是的右操作树—>34+5
    图解:
    image.png

    【中缀转前缀表达式】 结果:*+345
    同样核心是运算符替换左操作符左侧操作数的左括号,右括号对应删掉
    【运算核心】
    ①操作符移至(左-前缀/右-后缀)括号处
    ②相对括号删除
    【中缀转后缀规律】
    1)操作数的顺序没有变—————还是先算3,4后5
    2)操作符出现的顺序也和运算次序一致(中缀转前缀相反)
    3)操作符比操作树晚输出

    【编程流程】
    首先遇到数字则先输出,遇到操作符要暂存—>依据优先级规则,这将导致要反转次序输出—>栈保存暂未处理的操作符
    【完整流程—网上的】
    image.png

    最后参照北大python教数据结构老师的程序写了一波,太难了搞了一整天
    1-python中缀转后缀表达式.PNG

    C#版
    但是这版缺陷很大
    必须是正确的中缀表达式比如(3+4)5必须改为((3+4)5)
    这是控制台程序

    1. static void Main(string[] args)
    2. {
    3. //添加优先级
    4. Dictionary<string, int> Operator = new Dictionary<string, int>();
    5. Operator.Add("(", 1);
    6. Operator.Add("*", 3);
    7. Operator.Add("/", 3);
    8. Operator.Add("+", 2);
    9. Operator.Add("-", 2);
    10. List<string> tokenlist = new List<string>();
    11. List<string> final = new List<string>();
    12. Stack<string> operators = new Stack<string>();
    13. Console.WriteLine("请输入中缀表达式:");
    14. string a = Console.ReadLine().Trim();
    15. for(int i=0;i<a.Length;i++)
    16. {
    17. tokenlist.Add(a.Substring(i, 1));//把每个字符单独置入tokenlist
    18. }
    19. char temp;
    20. string topstack;//栈顶的字符
    21. foreach(string token in tokenlist)
    22. {
    23. temp = Convert.ToChar(token);
    24. if(Char.IsNumber(temp)||Char.IsLetter(temp))
    25. {
    26. final.Add(token);
    27. }
    28. else if(token=="(")
    29. {
    30. operators.Push(token);
    31. }
    32. else if(token==")")
    33. {
    34. topstack = operators.Pop();
    35. final.Add(topstack);
    36. while(topstack!="(")
    37. {
    38. topstack = operators.Pop();
    39. }
    40. }
    41. else
    42. {
    43. while(operators.Count!=0 && (Operator[operators.Peek()]>=Operator[token]))
    44. {
    45. tokenlist.Add(operators.Pop());
    46. final.Add(operators.Pop());
    47. }
    48. operators.Push(token);
    49. }
    50. }
    51. foreach(string s in final)
    52. {
    53. Console.Write(s);
    54. }
    55. Console.ReadKey();
    56. }

    这样一看确实python挺简便蛤

    结果:
    image.png

    Over~~~