后缀表达式的C语言实现详解

本文详细介绍了后缀表达式及其计算原理,包括从左至右的计算过程和中缀表达式转后缀表达式的方法。并提供了一个C语言实现后缀表达式计算的概述。
摘要由CSDN通过智能技术生成

什么是后缀表达式

后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。

后缀表达式计算

后缀表达式计算与前缀表达式类似,只是顺序是从左至右,具体过程如下:
从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

计算步骤

例如:后缀表达式为9+(3-1)*2+5/2转为后缀表达式为 9 3 1 - 2 * + 5 / 2 +

  1. 初始化一个空栈。此栈用来对要运算的数字进出使用
  2. 将9 3 1压栈遇到符号- 将栈顶两个元素拿出计算 再存入栈
  3. 遇到数字继续入栈 遇到符号继续将栈顶两个元素拿出计算 再存入栈
  4. 同样的操作步骤直至表达式计算完成

中缀表达式

中缀表达式就是四则运算表达式

中缀表达式转换成后缀表达式

上面的计算规则就是转换规则
即从左到右遍历,遇到数字就先写上,遇到任何运算符号 先判断与当前栈内的符号优先级,如果优先级高则直接进行运算,如果栈内的优先级高则先出栈再将当前的运算符压栈 直至栈内运算符运算完毕

C语言实现版

#include <stdio.h>
#include <stdlib.h>

#define STACKSIZE 250   //定义数组最大的容量
//栈的结构体
typedef struct _stack {
   
    char dat;
    struct _stack *next;
} stack;

int advance(char x) {
    //判断优先级
    if (x == '+' || x == '-')
        return 0;
    else if (x == '*' || x == '/')
        return 1;
    else if (x == '@' || x == '(' || x == ')')
        return -1;
}

int main() {
   
    // s是栈 top是栈顶指针
    stack *s, *top;
    char c;
    int calc[50];
    int i = 0;
    s = (stack *) malloc(sizeof(stack));
    s->dat = '@'
  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学五年级在读的蒟蒻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值