博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
逆波兰式(后缀表达式)的计算
阅读量:6922 次
发布时间:2019-06-27

本文共 3003 字,大约阅读时间需要 10 分钟。

输入 :后缀表达式(可带浮点数)

输出:double型的计算结果

代码:

#include 
#include
#include
#define ElemType double#define Stack_Init_Size 100#define Increase_Size 10#define MaxBuffer 10typedef 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;}

  

posted on
2014-12-15 12:48 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/devinblog/p/4164591.html

你可能感兴趣的文章
Linux之父为过去的言行道歉,宣布离开社区反思
查看>>
新浪微博自动化运维平台实践
查看>>
Quarkus:一个Kubernetes原生Java框架
查看>>
\"Grokking Algorithms\"简介与作者采访
查看>>
代码自解释不是不写注释的理由
查看>>
.NET或将引入类型类和扩展
查看>>
Azure Service Fabric正式发布
查看>>
GitLab公布关于开发者趋势的问卷调查结果
查看>>
无痛学会各种 2 的 Vue2+Vuex2+Webpack2 前后端同构渲染
查看>>
回归PHP(二)——微信接入支付相关
查看>>
容器化开发环境 - Dockerize
查看>>
【leetcode】191. Number of 1 Bits 正整数中的bit位为1的个数
查看>>
仿易信引导页面
查看>>
关于libevent的事件持续化EV_READ | EV_PERSIST
查看>>
React Native:那些开始之前应该知道的知识点
查看>>
打造高效个性Terminal(一)之 iTerm
查看>>
[转]:xmake高级特性之自定义task任务
查看>>
隐写术
查看>>
在实践中应用 RxSwift
查看>>
Sass 与 SCSS 是什么关系?
查看>>