UESTC--ICODING栈 后缀表达式计算

  • 题目:
    • 相关定义如下:
  • 代码:
  • 文章供学习交流参考

题目:

请使用已定义好的栈完成后缀表达式计算:
(1)如果是操作数,直接入栈
(2)如果是操作符op,连续出栈两次,得到操作数x 和 y,计算 x op y,并将结果入栈。

后缀表达式示例如下:
9 3 1 - 3 * + 10 2 / +
13 445 + 51 / 6 -
操作数、操作符之间由空格隔开,操作符有 +,-,*, /, %共 5 种符号,所有操作数都为整型。

相关定义如下:

typedef struct{ElemType elem[Stack_Size];int top;
}Stack;bool push(Stack* S, ElemType x);
bool pop(Stack* S, ElemType *x);
void init_stack(Stack *S);

其中,栈初始化的实现为:

void init_stack(Stack *S){S->top = -1;
}

需要完成的函数定义为:int compute_reverse_polish_notation(char *str);

函数接收一个字符指针,该指针指向一个字符串形式的后缀表达式,函数返回该表达式的计算结果。

代码:

#include "list.h" // 请不要删除,否则检查不通过
#include <stdio.h>
#include <stdlib.h>int compute_reverse_polish_notation(char* str)
{int i = 0;Stack S;init_stack(&S);  //初始化栈ElemType number_to_push, num1, num2;while (str[i] != '\0')   //防止字符串走到末尾{if (str[i] != ' ')   //跳过空格{if (str[i] >= '0' && str[i] <= '9')   //是数字开头{number_to_push = 0;while (str[i] != ' ' && str[i])   //将字符串转化为数字{number_to_push = number_to_push * 10 + (str[i] - '0');i++;}push(&S, number_to_push);} else {pop(&S, &num2);pop(&S, &num1);switch (str[i]) {case '+': {num1 += num2;break;}case '-': {num1 -= num2;break;}case '*': {num1 *= num2;break;}case '/': {num1 /= num2;break;}case '%': {num1 %= num2;break;}}push(&S, num1);  //压栈,将运算结果存回栈内供下一次运算}}i++;}pop(&S, &num1);   //最后的结果出栈return num1;
}

文章供学习交流参考

UESTC--ICODING栈 后缀表达式计算相关推荐

  1. python栈应用_栈应用之 后缀表达式计算 (python 版)

    栈应用之 后缀表达式计算 (python 版) 后缀表达式特别适合计算机处理 1.  中缀表达式.前缀表达式.后缀表达式区别 中缀表达式:(3 - 5) * (6 + 17 * 4) / 3 17 * ...

  2. 中缀表达式计算、后缀表达式计算、中缀转后缀

    代码来源 : bilibili网站 :https://www.bilibili.com/video/av91996256?from=search&seid=174497233083020298 ...

  3. 栈在表达式计算过程中的应用

    栈在表达式计算过程中的应用 :建立操作数栈和运算符栈.运算符有优先级. 规则: 自左至右扫描表达式,凡是遇到操作数一律进操作数栈. 当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈.反 ...

  4. 前缀表达式计算、中缀表达式计算、后缀表达式计算

    首先要知道什么是前缀表达式,什么是中缀表达式,什么是后缀表达式 所谓的中缀表达式就是类似于这种的运算 1+((2+3)×4)-5 所谓的前缀表达式就是符号在两个操作数的前面 - + 1 × + 2 3 ...

  5. 栈——后缀表达式(洛谷 P1449)

    题目选自洛谷P1449 阅读一个后缀表达式的方法是:从左往右读式子,一旦遇到运算法,就往前取n个数,这个n取决于运算法有多少个参数,然后擦掉这些参数和这个运算符,把计算的结果写在那里.接下来重复刚才的 ...

  6. PTA 6 后缀表达式计算 (100 分)

    Kunkun学长觉得应该让学弟学妹了解一下这个知识点:后缀表达式相对于中缀表达式更容易让计算机理解和学习.现在kunkun学长给出一串后缀表达式,你能帮他算出这个后缀表达式的值吗? 输入格式: 第一行 ...

  7. 使用栈实现中缀表达式转换成后缀表达式并计算结果(逆波兰计算器)

    一.中缀表达式转换成后缀表达式 具体步骤如下: 1.初始化栈stack(暂时存放运算符)以及集合list(存放后缀表达式) 2.从左向右扫描中缀表达式 3.当前元素为数字时,直接添加到list中 4. ...

  8. java简易计算机(用栈实现中缀转后缀,计算后缀表达式)

    这学期java课的一个小作业,用java编一个小计算器. 个人认为要点在于: 1.计算机的布局,即按钮和输出框的布局需要知道怎么操作,按钮的大小和字体的大小颜色.不同布局中按钮的改变大小等等 2.用栈 ...

  9. 数据结构——用栈实现后缀表达式的计算

    后缀表达式计算: " A B - C D E / F - * + G + " 在运算过程中,首先创建一个 "操作数栈" . 1.从左向右扫描,扫描到一个操作数, ...

最新文章

  1. PKI/CA (5)X.509公钥证书
  2. Mybatis常见面试题总结(详细)
  3. 32 六角oled驱动_Alienware下半年开售55英寸OLED显示器,4K120Hz、95%DCI-P3
  4. 牛客题霸 NC4 判断链表中是否有环
  5. boost::log::sinks::debug_output_backend用法的测试程序
  6. 《MANAGING THE DEVELOPMENT OF LARGE SOFTWARE SYSTEMS》总结
  7. 【转】C# 命名空间 Namespace (学习心得 23)
  8. 《Python Cookbook 3rd》笔记(5.21):序列化 Python 对象
  9. Matlab中图例注释函数legend详解
  10. 【jQuery学习】—实现弹幕效果
  11. 【新Attention】最强的Attention函数诞生啦,带给你意想不到的巨大提升!
  12. 微信小程序——事件备忘录
  13. 60页5G+智慧农业大数据 2022
  14. 计算机毕业设计springboot微信小程序购物商城源码
  15. git 将多条提交合并为一条
  16. Csdn视频第二十期 : 测试工具与流程讨论
  17. CSDN博客去除上传的图片水印
  18. 绘声绘影2022绿色旗舰版安装教程及功能介绍
  19. div+css(一)
  20. Redis Desktop Manager 0.9.3 版本下载(官方最新版需要订阅,好像要给钱才行)

热门文章

  1. iOS 高德地图怎么在屏幕内显示所有的Marker?
  2. siege压力测试软件,压力测试工具siege
  3. paddle实现线性回归
  4. 为什么婚戒要带在无名指上
  5. 盘点2017年晋升为Apache TLP的大数据相关项目
  6. 云服务器好还是虚拟主机好
  7. exe4j完成Java转exe 自带jre
  8. 【Vegas原创】win7下打开telnet服务
  9. Breeze库API总结(Spark线性代数库)
  10. binder 红黑树rb_node转实体对象