逆波兰式(后缀表达式)的计算
2014-12-15 12:48
183 查看
输入 :后缀表达式(可带浮点数)
输出:double型的计算结果
代码:
输出:double型的计算结果
代码:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define ElemType double #define Stack_Init_Size 100 #define Increase_Size 10 #define MaxBuffer 10 typedef struct sqStack { ElemType *top; ElemType *base; int initSize; }sqStack; typedef struct sqStack *LinkStack; //初始化 void InitStack( sqStack *s ) { s->base = (LinkStack)malloc(Stack_Init_Size * sizeof(ElemType)); if(!s->base) { printf("存储空间分配失败······\n"); return; } s->top = s->base; s->initSize = Stack_Init_Size; } //进栈 void Push(sqStack *s,ElemType e) { if(s->top - s->base >= s->initSize - 1) { s->base = (LinkStack)realloc(s->base,(s->initSize + Increase_Size) * sizeof(ElemType)); //第一个s->base是增加后的存储空间块的地址,第二个是增加空间之前的存储空间块地址,后面是增加过的存储空间块的大小 if(!s->base) { printf("增加存储空间失败······\n"); return; } s->initSize = Increase_Size + Stack_Init_Size; } *(s->top) = e; (s->top)++; } //出栈 void Pop(sqStack *s,ElemType *e) { if(s->top == s->base) { printf("栈已空,无法进行出栈操作······\n"); return; } s->top--; *e = *s->top; } //求栈的长度 int StackLen(sqStack s) { return (s.top - s.base); } //逆波兰计算器:输入逆波兰式(后缀表达式)输出结果 int main() { int i = 0,j,len; double m,n,t; char c; struct sqStack s; char str[MaxBuffer]; InitStack(&s); printf("请输入您要计算的后缀表达式,按Enter键结束(两个不同的字符之间用空格隔开):\n"); scanf("%c",&c); while(c != '\n') { while( (c >= '0'&&c <= '9') || c == '.') { str[i] = c; i++; // str[i] = '\0'; if(i >= 10) { printf("\n输入的数字过大导致出错!!!\n"); return -1; } scanf("%c",&c); if( c == ' ') { t = atof(str); // printf("\nt is %f\n",t); Push(&s,t); i = 0; for(j = 0;j < MaxBuffer;j++) { str[j] = '\0'; } break; } } switch( c ) { case '+': Pop(&s,&m); Pop(&s,&n); Push(&s,n+m); break; case '-': Pop(&s,&m); Pop(&s,&n); Push(&s,n-m); break; case '*': Pop(&s,&m); Pop(&s,&n); Push(&s,n*m); break; case '/': Pop(&s,&m); Pop(&s,&n); if( m == 0) { printf("\n除数为0,出错!!!\n"); return -1; } else { Push(&s,n/m); break; } } scanf("%c",&c); } Pop(&s,&t); printf("\n最终的计算结果为:%f \n",t); return 0; }
相关文章推荐
- 逆波兰式(后缀表达式)的运用-计算四则表达式并用lex,Yacc拓展
- 逆波兰表达式(后缀表达式)及其计算
- 数据结构-------计算逆波兰表达式(后缀表达式)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- 【数据结构】动态栈+括号匹配+逆波兰表达式(后缀表达式计算)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- 使用逆波兰式(后缀表达式)实现多功能计算器
- 计算逆波兰式
- 图解后缀表达式的计算过程
- 我就给一个PHP逆波兰表达式的算法吧---工资计算专用
- 我就给一个PHP逆波兰表达式的算法吧---工资计算专用
- 后缀表达式(逆波兰表达式),并求值(可求浮点、负数与大于10的数),C++实现
- 逆波兰表达式的生成及计算
- 从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$。
- 图解后缀表达式的计算过程
- 用后缀表达式计算四则运算算法