输入格式
输入一共有两行,第一行为一个整数 m(1≤m≤100),代表表达式中一共有 m 个字符。
第二行的输入为一个表达式,表达式中只包含若干个整数以及+,-,*,/四种运算符。

输出格式
输出只有一行,即输入的表达式的计算结果。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>#define ERROR 0
#define OK 1typedef struct Stack {int *elements;int max_size, top_index;
} Stack;void init(Stack *s, int length) {s->elements = (int *)malloc(sizeof(int) * length);s->max_size = length;s->top_index = -1;
}int push(Stack *s, int element) {if (s->top_index >= s->max_size - 1) {return ERROR;}s->top_index++;s->elements[s->top_index] = element;return OK;
}int pop(Stack *s) {if (s->top_index < 0) {return ERROR;}s->top_index--;return OK;
}int top(Stack *s) {return s->elements[s->top_index];
}int empty(Stack *s) {if (s->top_index < 0) {return 1;} else {return 0;}
}int precede(char a, char b) {if ((a == '*' || a == '/' ) && (b == '+' || b == '-')) {return 1;} else {return 0;}
}
int operate(char theta, int a, int b) {if (theta == '+') {return a + b;} else if (theta == '-') {return a - b;} else if (theta == '*') {return a * b;} else {return a / b;}
}
void calc(Stack *numbers, Stack *operators) {int b = top(numbers);// printf("b = %d\n",top(numbers));pop(numbers);int a = top(numbers);// printf("a = %d\n",top(numbers));pop(numbers);push(numbers, operate(top(operators), a, b));//printf("%d\n",operate(top(operators), a, b));pop(operators);
}void clear(Stack *s) {free(s->elements);free(s);
}int main() {int m;scanf("%d", &m);Stack *numbers = (Stack *)malloc(sizeof(Stack));init(numbers, m);Stack *operators = (Stack *)malloc(sizeof(Stack));init(operators, m);char *buffer = (char *)malloc(sizeof(char) * (m + 1));scanf("%s", buffer);int i = 0;while (i < m) {if (isdigit(buffer[i])) {push(numbers, buffer[i] - '0');i++;} else {if (empty(operators) || precede(buffer[i], top(operators))) {push(operators, buffer[i]);i++;}else {calc(numbers, operators);}}}while (!empty(operators)) {calc(numbers, operators);}printf("%d", top(numbers));clear(numbers);clear(operators);free(buffer);return 0;
}

栈的复习(加减乘除表达式求值)相关推荐

  1. 栈的应用-算数表达式求值

    List item ** 实验要求** 河 南 师 范 大 学 20学年-21学年第 1 学期 数据结构实验任务书 专业名称: 实验学时: 4 课程名称:数据结构 任课教师: 王亚丽 实验题目:栈的应 ...

  2. 栈应用:后缀表达式求值

    在上一篇博客 栈应用:中缀表达式转后缀表达式 中我们知道如何通过栈将中缀表达式转为后缀表达式,这次我们继续用栈 来实现后缀表达式求值,结合上一篇博客. 上一篇博客中是用c语言实现的,由于c语言中不支持 ...

  3. 【数据结构】详解栈的应用之表达式求值

    首先明白: 前缀表达式:符号在前,如-×+3456 中缀表达式:符号在中间,如(3 + 4) × 5 - 6 后缀表达式:符号在最后,如34+5×6-,后缀表达式不出现括号. 中缀表达式转后缀表达式的 ...

  4. 栈的应用之表达式求值

    表达式求值 表达式求值是栈的一个重要的应用.例如计算器中的加减乘除表达式的计算,都会使用栈来进行求值. 表达式的表示方法主要有中缀表示法和后缀表示法. (老师的代码,现在的我能力有限,没法过多研究c+ ...

  5. 栈应用:中缀表达式求值

    后缀表达式求值比较简单,基本过程为:遇到数字则进栈,遇到运算符则出栈俩数字然后计算结果,再把结果入栈,过程比较简单,不再复习了,下面着重记录中缀表达式求值 中缀表达式求值可以先将中缀转后缀,再用后缀计 ...

  6. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  7. C/C++ 栈的应用:表达式求值

    表达式求值(中缀->后缀) 思路 算符间的优先关系 关键代码 思路 1.初始化两个栈,OPTR保存运算符,OPND保存操作数 2.从左->右边获元素. 3.遇操作数,进栈OPND. 3.遇 ...

  8. C语言栈的应用——后缀表达式求值

    算法思路 ​ 上次已经完成了由中缀表达式转后缀表达式的算法,而后缀表达式的优点就是可以从左至右直接读取,没有算数优先级的考量,所以直接进行运算即可. ​ 该算法需要使用一个栈用来保存操作数,在读取到数 ...

  9. 数据结构之栈的应用:表达式求值

    表达式求值 思维导图: 求值算法: 中缀转后缀求值:(后缀求值) 中缀转前缀求值:(前缀求值) 转化算法:(中缀转后缀) 中缀表达式的计算(中缀转后缀+后缀求值): 总结: 思维导图: 求值算法: * ...

最新文章

  1. 通过PRINT过程制作报表
  2. c# 串口最简单接收十六进制
  3. c打印char* 数据_JAVA基础篇(数据类型)
  4. 文档模型(JSON)使用介绍
  5. VTK:几何对象之 Axes
  6. 《LED调光-DMX512灯光协义接收控制》转
  7. kotlin为什么比java编译慢_为什么Kotlin编译速度比Scala快? [关闭]
  8. 网络基础:计算机网络由基础到深入常用知识集锦!
  9. 90后一代人还能通过攒钱改变现状吗?
  10. ioread32函数有关知识
  11. python模拟http请求
  12. 英语笔记:词组句子:0712
  13. java 加密_Java版SMS4加密解密算法
  14. MySQL 5.5 主从复制异步、半同步以及注意事项详解
  15. javascript学习之利用DOM和正则表达式判断主流浏览器的类型
  16. 一段oracle中的“复杂”分组统计sql
  17. 01.FFmpeg下载以及安装
  18. python使用masscan扫描端口
  19. 案例三:小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌。编写一个程序模拟这一个过程:两个整数分别保存在两个变量中,将这两个变量的值互换,并输出互换后的结果。...
  20. vscode最常用插件

热门文章

  1. python脚本打包成linux命令_Python脚本文件打包成可执行文件的方法
  2. request和response的中文乱码问题
  3. 如何免费的让网站启用HTTPS
  4. idea进行断点快捷键
  5. UE4使用自定义字体
  6. [转载]手工安全测试方法修改建议
  7. 模块(module)
  8. web开发中不同设备浏览器的区分
  9. Android—SDCard数据存取Environment简介
  10. VC++动态链接库编程(转载)