C语言实现中缀转后缀并计算表达式结果

本文详细介绍了如何将一个包含加、减、乘、除运算的中缀表达式转换为后缀表达式,并通过算法计算其结果。文章提供了完整的C语言代码示例,展示了使用栈数据结构实现中缀到后缀转换的过程,以及后缀表达式的求值方法。

一、问题描述

【问题描述】

从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2  = 。计算表达式结果,并输出。

要求:
1、表达式运算符只有+、-、*、/,表达式末尾的’=’字符表示表达式输入结束,表达式中可能会出现空格;
2、表达式中不含圆括号,不会出现错误的表达式;
3、出现除号/时,以整数相除进行运算,结果仍为整数,例如:5/3结果应为1。

【输入形式】

在控制台中输入一个以’=’结尾的整数算术运算表达式。

【输出形式】

向控制台输出计算结果(为整数)。

【样例1输入】

5 - 1 * 2 * 3 + 12 / 2 / 2  =

【样例1输出】

2



二、AC代码

有点长

#include <stdio.h>
# define maxsize 1000

typedef struct {
   
   
    int flag;//如果取1表示这个元素是整数,如果取0表示这个元素是运算符
    int num;
    char c;
    int level;
}opts;

// 初始化堆栈
void initStack(int Top){
   
   
    Top=-1;
}

// 测试堆栈是否为空
int isEmpty(int *Top){
   
   
    return *Top==0;
    //这里取0是因为我一开始把一个无关符号‘#’给压进去了,作为优先级最低的运算符,所以符号栈的栈底一直是这个无效符号
}

// 测试堆栈是否已满
int isFull(int *Top){
   
   
    return *Top==maxsize-1;
}

// 进栈
void push(opts s[],opts item,int *Top){
   
   
    if(isFull(&Top)){
   
   
        printf("the stack is full\n");
        return ;
    }
    else{
   
   
        s[++(*Top)]=item;
    }
}

// 出栈
opts pop(opts s[],int *Top){
   
   
    if(isEmpty(&Top
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值