C语言实现逆波兰表达式
来源:互联网 发布:全国计算机二级考试vb 编辑:程序博客网 时间:2024/05/19 12:15
#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define STACK_INIT_SIZE 20#define STACKINCREMENT 10#define MAXBUFFER 10typedef 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,(STACKINCREMENT+s->stackSize)*sizeof(ElemType)); if(!s->base) exit(0); s->top=s->base+s->stackSize; s->stackSize=s->stackSize+STACKINCREMENT; } *(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);}/***逆波兰表达式**正常表达式--->逆波兰表达式**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 - * +*/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>=10) { printf("error"); 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("error!"); return -1; } break; } scanf("%c",&c); } Pop(&s,&d); printf("the final result:%f",d); return 0;}
0 0
- 逆波兰表达式C语言实现
- C语言实现逆波兰表达式
- C 逆波兰表达式
- 逆波兰 计算器 C语言实现代码
- C语言栈实现逆波兰计算器
- 逆波兰 计算器 C语言实现
- 逆波兰表达式实现
- 表达式计算器(逆波兰法)栈操作(C语言实现)
- 百炼-2694-逆波兰表达式-C语言-递归
- C语言利用栈实现将中缀表达式转换为后缀表达式(即逆波兰式)
- 逆波兰表达式算法实现
- 逆波兰表达式java实现
- 逆波兰表达式原理实现
- 波兰、逆波兰表达式
- C语言实现的简单的逆波兰计算器
- 逆波兰表达式解数学运算(c#)
- [C++]求表达式的逆波兰式
- 逆波兰表达式——第四届蓝桥杯省赛C语言A组第6题
- mysql系列-解压版安装mysql和配置以及密码修改
- Windows平台大量更新Android SDK的方法
- ubuntu装机必知
- new表达式与operator new函数
- NSPredicate
- C语言实现逆波兰表达式
- 安卓 新浪微博随便看看模拟程序
- 理解RESTful架构
- Android设计风向标Material design语言
- Eclipse 配置android
- POJ 1661 Help Jimmy
- C语言栈的链式存储结构
- 测试
- 我走的弯路