中缀表达式转换为逆波兰表达式(C++)
2015-08-03 11:06
543 查看
中缀表达式转换为逆波兰表达式
控制台显示结果为:
如果有看不懂的地方,请联系我:绿色流氓兔929955289
#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZI 20 #define STACKINCREMENT 10 typedef char ElemType; typedef struct { ElemType *base; ElemType *top; int stackSize; }sqStack;//栈 void InitStack(sqStack *s) { s->base = (ElemType*)malloc(STACK_INIT_SIZI*sizeof(ElemType)); if(!s->base) { exit(0); } s->top = s->base; s->stackSize = STACK_INIT_SIZI; } 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 = s->base + s->stackSize; s->stackSize = s->stackSize+STACKINCREMENT; } *(s->top) = e;//存放数据 s->top++; } //e作为返回值 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, e; InitStack(&s); printf("请输入中缀表达式,以#作为结束标志"); scanf("%c", &c); while(c != '#') { while(c>='0' && c<='9')//使得10这样连续的数字直接输出 { printf("%c", c); scanf("%c",&c); if(c<'0' || c>'9') { printf(" "); } } if(')' == c) { Pop(&s, &e); while('(' != e) { printf("%c ", e); Pop(&s, &e); } } else if('+'==c || '-'==c) { if(!StackLen(s)) { Push(&s, c); } else { do { Pop(&s,&e); if('(' == e)//查看栈顶元素是否为'(' { Push(&s, e); } else { printf("%c ", e); } }while(StackLen(s) && '('!=e); Push(&s, c); } } else if('*'==c || '/'==c || '('==c) { Push(&s, c); } else if('#' == c) { break; } else { printf("\n出错:输入格式错误!"); } scanf("%c" ,&c); } while(StackLen(s)) { Pop(&s, &e); printf("%c ", e); } printf("\n"); return 0; }
控制台显示结果为:
如果有看不懂的地方,请联系我:绿色流氓兔929955289
相关文章推荐
- 将中缀表达式转化为后缀表达式
- 前缀表达式,中缀表达式,后缀表达式转化和计算
- 中缀表达式与后缀表达式
- Python实现Shuntingyard (调度场)算法
- poj 中缀表达式的值
- 前、中、后缀表达式
- java 中缀转后缀表达式(查阅别人资料后整理)
- Android开发——实现Android简易计算器
- 前缀、中缀、后缀表达式
- 用栈将中缀表达式转化为后缀表达式
- 中缀表达式转换为后缀表达式
- 波兰式、逆波兰式与表达式求值
- 前中后缀表达式以及表达式树
- C++实现中缀表达式求值代码
- 中缀表达式转后缀表达式思想
- 如何利用堆栈及逆波兰表达式进行数学四则运算(C语言版)
- 计算器C++代码实现—— 中缀表达式的计算
- c++ 直接中缀表达式求值 仅支持正整数的四则混合运算
- 栈的应用--计算字符串表达式
- NYOJ--郁闷的C小加(一)