数据结构与算法笔记 lesson 12 中缀表达式转后缀表达式
来源:互联网 发布:java生成unix时间戳 编辑:程序博客网 时间:2024/05/20 06:23
中缀表达式
-(1-2)*(4+5)
后缀表达式
- 1 2 - 4 5 + *
1+(2-3)*4+10/5
第一个输入是数字1 ,数字在后缀表达式中都是直接输出,接着是符号“+” ,入栈
第三个字符是“(”,依然是符号,入栈,接着是数字2 ,输出,然后是符号“-” ,入栈
接下来是数字3,输出, 紧跟着是“)”,去匹配栈里的“)”,进行计算
* 直接入栈,遇到4 ,输出之后是“+”,此时栈顶元素是符号“*” ,乘号优先级比加号大, *先出栈,进行计算,再把+入栈
紧接着数字10,输出,最后是符号“/”,进栈。
从左到右遍历中缀表达式的每个数字和符号,若是数字则直接输出,若是符号,则判断其与栈顶符号的优先级,是右括号或者优先级低于栈顶符号,则栈顶元素依次出栈并输出,直到遇到左括号或者栈空才将低优先级的符号入栈。
#include <stdio.h>#include<stdlib.h>#include<ctype.h>#include<math.h>#define STACK_INIT_SIZE 20#define STACKINCREMENT 10#define MAXBUFFER 10typedef char 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, (s->stackSize + STACKINCREMENT) * sizeof(ElemType));if (!s->base)exit(0);}*(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);}int main(){sqStack s;char c,e;InitStack(&s);printf("请输入要计算的算式,以#作为结束表示:\n");scanf("%c", &c);while (c!='#'){while (c >= '0' && c <= '9'){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);elseprintf("%c ", e);} while (StackLen(s)&&'('!=e);Push(&s,c);}}else if ('*'==c||'/'==c||'('==c){Push(&s, c);}else if('#'==c){break;}else{printf("\n输出格式错误!\n");return -1;}scanf("%c", &c);}while (StackLen(s)){Pop(&s, &e);printf("%c ",e);}return 0;}
0 0
- 数据结构与算法笔记 lesson 12 中缀表达式转后缀表达式
- 【算法与数据结构】中缀表达式转为后缀表达式
- 数据结构与算法分析 c++11 练习3.22 中缀表达式转后缀表达式,后缀表达式计算, 多项式计算
- 数据结构与算法Java版——中缀表达式转后缀表达式
- 《数据结构》中缀表达式转后缀表达式
- 【数据结构学习】中缀表达式转后缀表达式
- 【数据结构】中缀表达式转后缀表达式
- 中缀表达式算法实现&中缀表达式转后缀表达式
- python数据结构与算法 10 栈的应用之中缀转后缀表达式算法的实现
- 数据结构与算法(Java描述)-8、中缀表达式转换后缀表达式算法
- 数据结构算法:中缀表达式转化为后缀表达式
- 《数据结构和算法》之中缀表达式、后缀表达式转换
- 数据结构栈之中缀表达式转后缀
- 数据结构堆栈之中缀表达式转后缀
- 中缀表达式与后缀表达式
- 中缀表达式与后缀表达式
- 中缀表达式与后缀表达式
- 【数据结构】中缀表达式|后缀表达式|前缀表达式
- C语言中的宏定义
- Linux xargs详解
- Python学习
- Activity锁屏状态下的生命周期
- 代码积累(js)
- 数据结构与算法笔记 lesson 12 中缀表达式转后缀表达式
- 96. Unique Binary Search Trees
- box-sizing
- Hadoop报错:could only be replicated to 0 nodes, instead of 1
- 数据结构(一) 时间复杂度
- unexpectedly found nil while unwrapping an Optional value的解释 && Swift中Optional
- redirect和forward的区别
- [js操作(转)]JavaScript 跨域漫游解析
- 细说setTimeout/setImmediate/process.nextTick的区别