C语言实现逆波兰表达式
2015-05-18 13:05
399 查看
#include <stdio.h> #include <stdlib.h> #include <ctype.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,(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; }
相关文章推荐
- 【晨哥的C语言之旅】逆波兰表达式实现计算器功能
- 逆波兰表达式C语言实现
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- C语言简单计算器(基于栈和逆波兰表达式)这几天忙着开学的事宜,一直没时间刷提,就把今天刚做好的课程设计——简易计算器贴在这给大家参考!(计算小数时要用0减正数并用括号括起来,这一点不足以后再改进)
- 逆波兰表达式(RPN)算法简单实现
- 【原创】Delphi实现数学表达式的计算(逆波兰式法)-四则运算解析
- 逆波兰表达式实现
- 在c语言中用正则表达式实现对email地址和ip地址的验证
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- 数据结构之用栈实现逆波兰表达式
- 使用堆栈思路 实现逆波兰表达式
- 栈的操作实现逆波兰表达式的计算
- C语言利用栈实现将中缀表达式转换为后缀表达式(即逆波兰式)
- 堆栈的应用(2) 中缀算术表达式到后缀(逆波兰记法reverse polish notation)的转换及其计算 C++实现
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- Java编程实现逆波兰表达式代码示例
- 在C语言中利用PCRE实现正则表达式
- 堆栈的应用(2) 中缀算术表达式到后缀(逆波兰记法reverse polish notation)的转换及其计算 C++实现
- 数据结构之用栈实现逆波兰表达式
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)