【数据结构】逆波兰表达式

前端之家收集整理的这篇文章主要介绍了【数据结构】逆波兰表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

此篇文章中默认逆波兰表达式已经转换为后缀表达式

题意简述为;



解决问题的思想为:建立一个栈,把这些数据依次往栈里读,若读到数字入栈,若读到符号将栈顶元素保存到right中,pop掉当前元素,再将栈顶元素保存到left中将结果算出来在入栈,直到算完为止。

代码如下:


  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #include "stack.hpp"
  5.  
  6. enum Type
  7. {
  8. ADD,SUB,MUL,DIV,OP_NUM,};
  9. struct Cell
  10. {
  11. Type _type;
  12. int num;
  13. };
  14.  
  15.  
  16. //逆波兰表达式
  17. long long CountExp(Cell RPNExp[],int size)
  18. {
  19. stack<Cell> s1;
  20. Cell sum;
  21. sum.num = 0;
  22. int i = 0;
  23. for(i=0;i<11;i++)
  24. {
  25. if(RPNExp[i]._type == OP_NUM)
  26. {
  27. s1.PushStack(RPNExp[i]);
  28. }
  29. else
  30. {
  31. int right = s1.GetTop().num ;
  32. s1.PopStack();
  33. int left = s1.GetTop().num ;
  34. s1.PopStack();
  35. switch(RPNExp[i]._type)
  36. {
  37. case ADD:
  38. sum.num = left + right;
  39. break ;
  40. case SUB:
  41. sum.num = left - right;
  42. break ;
  43. case MUL:
  44. sum.num = left * right;
  45. break ;
  46. case DIV :
  47. sum.num = left / right;
  48. break ;
  49. default :
  50. break;
  51. }
  52. s1.PushStack(sum);
  53.  
  54. }
  55. }
  56.  
  57. return sum.num ;
  58. }
  59.  
  60.  
  61. void Test6()
  62. {
  63. Cell RPNExp[] = {
  64. OP_NUM,12,3,4,ADD,6,8,2,};
  65.  
  66. long long num = CountExp(RPNExp,11);
  67. cout<<num<<endl;
  68.  
  69. }
  70.  
  71. int main()
  72. {
  73. Test6();
  74. return 0;
  75. }

猜你在找的数据结构相关文章