UESTC--ICODING栈 后缀表达式计算
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栈 后缀表达式计算相关推荐
- python栈应用_栈应用之 后缀表达式计算 (python 版)
栈应用之 后缀表达式计算 (python 版) 后缀表达式特别适合计算机处理 1. 中缀表达式.前缀表达式.后缀表达式区别 中缀表达式:(3 - 5) * (6 + 17 * 4) / 3 17 * ...
- 中缀表达式计算、后缀表达式计算、中缀转后缀
代码来源 : bilibili网站 :https://www.bilibili.com/video/av91996256?from=search&seid=174497233083020298 ...
- 栈在表达式计算过程中的应用
栈在表达式计算过程中的应用 :建立操作数栈和运算符栈.运算符有优先级. 规则: 自左至右扫描表达式,凡是遇到操作数一律进操作数栈. 当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈.反 ...
- 前缀表达式计算、中缀表达式计算、后缀表达式计算
首先要知道什么是前缀表达式,什么是中缀表达式,什么是后缀表达式 所谓的中缀表达式就是类似于这种的运算 1+((2+3)×4)-5 所谓的前缀表达式就是符号在两个操作数的前面 - + 1 × + 2 3 ...
- 栈——后缀表达式(洛谷 P1449)
题目选自洛谷P1449 阅读一个后缀表达式的方法是:从左往右读式子,一旦遇到运算法,就往前取n个数,这个n取决于运算法有多少个参数,然后擦掉这些参数和这个运算符,把计算的结果写在那里.接下来重复刚才的 ...
- PTA 6 后缀表达式计算 (100 分)
Kunkun学长觉得应该让学弟学妹了解一下这个知识点:后缀表达式相对于中缀表达式更容易让计算机理解和学习.现在kunkun学长给出一串后缀表达式,你能帮他算出这个后缀表达式的值吗? 输入格式: 第一行 ...
- 使用栈实现中缀表达式转换成后缀表达式并计算结果(逆波兰计算器)
一.中缀表达式转换成后缀表达式 具体步骤如下: 1.初始化栈stack(暂时存放运算符)以及集合list(存放后缀表达式) 2.从左向右扫描中缀表达式 3.当前元素为数字时,直接添加到list中 4. ...
- java简易计算机(用栈实现中缀转后缀,计算后缀表达式)
这学期java课的一个小作业,用java编一个小计算器. 个人认为要点在于: 1.计算机的布局,即按钮和输出框的布局需要知道怎么操作,按钮的大小和字体的大小颜色.不同布局中按钮的改变大小等等 2.用栈 ...
- 数据结构——用栈实现后缀表达式的计算
后缀表达式计算: " A B - C D E / F - * + G + " 在运算过程中,首先创建一个 "操作数栈" . 1.从左向右扫描,扫描到一个操作数, ...
最新文章
- PKI/CA (5)X.509公钥证书
- Mybatis常见面试题总结(详细)
- 32 六角oled驱动_Alienware下半年开售55英寸OLED显示器,4K120Hz、95%DCI-P3
- 牛客题霸 NC4 判断链表中是否有环
- boost::log::sinks::debug_output_backend用法的测试程序
- 《MANAGING THE DEVELOPMENT OF LARGE SOFTWARE SYSTEMS》总结
- 【转】C# 命名空间 Namespace (学习心得 23)
- 《Python Cookbook 3rd》笔记(5.21):序列化 Python 对象
- Matlab中图例注释函数legend详解
- 【jQuery学习】—实现弹幕效果
- 【新Attention】最强的Attention函数诞生啦,带给你意想不到的巨大提升!
- 微信小程序——事件备忘录
- 60页5G+智慧农业大数据 2022
- 计算机毕业设计springboot微信小程序购物商城源码
- git 将多条提交合并为一条
- Csdn视频第二十期 : 测试工具与流程讨论
- CSDN博客去除上传的图片水印
- 绘声绘影2022绿色旗舰版安装教程及功能介绍
- div+css(一)
- Redis Desktop Manager 0.9.3 版本下载(官方最新版需要订阅,好像要给钱才行)