【资料结构】前后序求值

前序求值

程式说明

相关函式

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 20int main() {  char str1[MAX] = {"-+2/*3222"};  char str2[MAX] = {"-+-/421*23*41"};  //测资1,2  Calculation(str1);  Calculation(str2);  return 0;}

后序求值

与前序差异

avatar
1:

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

2:

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

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章