【资料结构】前後序求值

前序求值

程序说明

相关函式

get_value():计算并回报结果

说明:
将引入的两个运算元与运算子计算,并回传结果。
int get_value(int op1, int op2, char op) {
  //printf("(%d %c %d)\n", op1, op, op2);
  switch (op) {
  case '+':
    return op1 + op2;
  case '-':
    return op1 - op2;
  case '*':
    return op1 * op2;
  case '/':
    return op1 / op2;
  case '%':
    return op1 % op2;
  default:
    return 0;
  }
}

Calculation():引入运算式字串,回传求值答案

说明:
将引入的字串,用相反的顺序计算,并将每次计算结果存入堆叠,等待输出或引用。
void Calculation(char *str) {
  char stack[MAX];
  int top = 0, j = 0, i;
  for (i = strlen(str) - 1; i >= 0; i--) {
    // printf("\n%c\n", str[i]);
    switch (str[i]) {
    case '+':
    case '-':
    case '*':
    case '/':
    case '%':
      stack[top - 1] = get_value(stack[top], stack[top - 1], str[i]);
      top--;
      continue;
      //遇到运算符号时,将堆叠的前两个数值做运算,
      //被计算的两个空间移除,存入计算结果。
    default:
      stack[++top] = str[i] - 48;
      continue;
      //遇到数值时,减掉48使其为数字型态的真数,存入堆叠空间。
    }
  }
  printf("%s=%d\n",str ,stack[top]);
  //结果
}

主程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 20
int main() {
  char str1[MAX] = {"-+2/*3222"};
  char str2[MAX] = {"-+-/421*23*41"};
  //测资1,2
  Calculation(str1);
  Calculation(str2);
  return 0;
}

後序求值

与前序差异

avatar
1:

  • 前置式:由最後一个字元判断到第一个字元。
  • 後置式:第一个判断到最後一个。

2:

  • 前置式:计算运算式时,因为是倒置的关系,顺序要相反。
  • 後置式:按照原顺序计算即可。

<<:  【资料结构】前中後运算式转置

>>:  [Golang]同步工具-sync包的Cond-心智图总结

【HTML】dl dd dt 清单型的网页标签

网页呈现若有内文有「标题+内文的清单」会怎麽排版呢? 可以使用 description list 哦...

伸缩自如的Flask [day 24] GCP app engine (deploy)

接续着昨天的进度,首先可以先准备你的程序,而我在github 上有放上范例: https://git...

[Day-2] R语言 - 分群是甚麽? (what's clustering)

您的订阅是我制作影片的动力 订阅点这里~ 若内容有误,还请留言指正,谢谢您的指教 ...

Day18 简易资料库RealmSwift小实作5

接续昨天~ 第四行id.count>0是做说明若是realm里的资料大於0比(因为阵列是从0开...

[DAY-30] 最後一幕只是故事的结尾,你也知道故事没有结尾是行不通的。

And So It Is. 其实想说一些三八的话,BUT 没有 FU XDDD 好啦三十天 ya!...