数据结构与算法笔记 lesson 11 逆波兰计算器
2016-12-04 09:17
661 查看
逆波兰表达式
对于(1-2)*(4-5),用逆波兰表示法,应该是1 2 - 4 5 + *数字1 和 2 进栈,遇到减号运算符则弹出两个元素进行运算并把结果入栈
数字4 和 5 入栈,遇到加号运算符,4和5出栈,并把结果入栈
又遇到乘法,将9和-1弹出栈进行乘法计算,此时栈空并无数据压栈,-9位最终运算结果
实现对逆波兰输入的表达式进行计算
支持带小数点的数据
正常表达式 --- > 逆波兰表达式
a + b --- > a b +
a+(b-c) ----> a b c - +
a+(b-c) *d ----> a b c - d * +
a+ d*(b-c) ----> a d b c - * +
#include <stdio.h> #include<stdlib.h> #include<ctype.h> #include<math.h> #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 #define MAXBUFFER 10 typedef double ElemType; typedef struct { ElemType *base; ElemType *top; int stackSize; }sqStack; void InitStack(sqStack *s) { s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if (!s->base) exit(0); s->top = s->base; s->stackSize = STACK_INIT_SIZE; } void Push(sqStack *s, ElemType e) { if (s->top - s->base >= s->stackSize) { s->base = (ElemType*)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof(ElemType)); if (!s->base) exit(0); } *(s->top) = e; s->top++; } void Pop(sqStack *s, ElemType *e) { if (s->top == s->base) return; *e = *--(s->top); } int StackLen(sqStack s) { return (s.top - s.base); } int main() { sqStack s; char c; double d, e; char str[MAXBUFFER]; int i = 0; InitStack(&s); printf("请按逆波兰表达式输入待以计算数据,数据与运算符用空格隔开,以#作为结束表示:\n"); scanf("%c", &c); while (c != '#') { while (isdigit(c) || c == '.') { str[i++] = c; str[i] = '\0'; if (i >= MAXBUFFER) { printf("出错,输入的数据过大\n"); return -1; } scanf("%c", &c); if (c == ' ') { d = atof(str); Push(&s, d); i = 0; break; } } switch (c) { case '+': Pop(&s, &e); Pop(&s, &d); Push(&s, d + e); break; case '-': Pop(&s, &e); Pop(&s, &d); Push(&s, d - e); break; case '*': Pop(&s, &e); Pop(&s, &d); Push(&s, d * e); break; case '/': Pop(&s, &e); Pop(&s, &d); if (e != 0) Push(&s, d / e); else printf("\n出错,除数为零!\n"); break; } scanf("%c", &c); } Pop(&s, &d); printf("最终的结果为%f\n", d); return 0; }
相关文章推荐
- UI设计中蕴涵着系统重要的数据结构与功能设计
- sdut 数据结构实验之二叉树六:哈夫曼编码
- 数组反转算法
- 数据结构--顺序存储线性表(ArrayList)
- python 数据结构
- 【数据结构】二叉查找树
- 【数据结构】二叉树的简单操作及简单应用
- 【数据结构】利用后缀表达式求表达式的值
- 二维数组地址的计算
- 哈希表的理解
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序二:交换排序
- 数据结构之栈
- es6 javascript的WeakSet数据结构
- 数据结构实验之查找一:二叉排序树
- 图
- 数据结构——查找二叉树已知节点的祖先节点
- 数据结构实验之查找二:平衡二叉树
- 数据结构——距离根节点为k的节点
- 利用Python Pandas进行数据预处理-Pandas基本的数据结构