栈的应用之后缀表达式的求值
来源:互联网 发布:java clone 深拷贝 编辑:程序博客网 时间:2024/05/17 16:55
运算符号在两数字中间的称为中缀表达式,如5+9,4*9+6等,我们平时计算一般都是用中缀 表达式。运算符号在两数字后面的称为后缀表达式,如59-,46*6+,与前两个中缀表达式作用相同。
用栈实现后缀表达式的求值的基本思想就是先初始化一个空栈,然后输入字符串,遍历字符串,如果是数字,则将数字入栈,如果是运算符号,则将前两次入栈的数出栈作运算,再将结果入栈,最后入栈的数即为表达式的结果。
#include<stdio.h>#include<stdlib.h>/* 链栈结构 */typedef struct StackNode{ int data; struct StackNode *next;}StackNode, *LinkStackPtr;typedef struct{ LinkStackPtr top; int count;}LinkStack;int InitStack(LinkStack *S){ S->top = (LinkStackPtr)malloc(sizeof(StackNode)); if (!S->top) return 0; S->top = NULL; S->count = 0; return 1;}void Push(LinkStack *S, int e){ LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode)); s->data = e; s->next = S->top; /* 把当前的栈顶元素赋值给新结点的直接后继,见图中① */ S->top = s; /* 将新的结点s赋值给栈顶指针,见图中② */ S->count++;}/* 若栈S为空栈,则返回TRUE,否则返回FALSE */int StackEmpty(LinkStack S){ if (S.count == 0) return 1; else return 0;}/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */int Pop(LinkStack *S, int *e){ LinkStackPtr p; if (StackEmpty(*S)) return 0; *e = S->top->data; p = S->top; /* 将栈顶结点赋值给p,见图中③ */ S->top = S->top->next; /* 使得栈顶指针下移一位,指向后一结点,见图中④ */ free(p); /* 释放结点p */ S->count--; return 1;}float jisuan(int x, int y, char z){ switch (z) { case '+':return x + y; case '-':return x - y; case '*':return x * y; case '/':return x / y; default: break; }}int main(){ int i=0; int n,m; int result; char a[20]; LinkStack s; InitStack(&s); gets_s(a); while (a[i] != '\0'){ if (a[i] >= '0' && a[i] <= '9'){ Push(&s, (int)a[i]-48); } else { Pop(&s, &n); Pop(&s, &m); result = jisuan(m, n, a[i]); Push(&s, result); } i++; } Pop(&s, &result); printf("%d\n", result); system("pause"); return 0;}
如果要计算(3+6-4)*6,先将其转为后缀表达式36+4-6*
这段代码也有许多小问题,比如只能计算个位数的运算,除法结果是小数的也有问题。
阅读全文
0 0
- 栈的应用之后缀表达式的求值
- 栈的应用-后缀表达式运算求值
- 中缀表达式转后缀表达式求值(栈的应用)
- 栈的应用——中缀表达式转后缀表达式,后缀表达式的求值,中缀表达式求值
- C++栈的应用——后缀表达式求值、中缀表达式到后缀表达式的转换
- 栈的应用 后缀表达式求值 后缀表达式与中缀表达式的转换
- 后缀表达式的求值
- 栈的应用--算术表达式的求值(中缀转后缀然后计算后缀表达式的值)
- 栈的应用之表达式求值code_legend
- STL栈的应用之表达式求值
- javascript栈的应用之表达式求值
- 栈的应用之表达式求值
- 栈的应用之算术表达式求值
- 栈的应用之表达式求值
- 栈的应用之中缀表达式求值
- 用栈解决后缀表达式的求值
- 【数据结构】栈的应用---四则运算表达式求值(中缀表达式与后缀表达式转换)
- 后缀表达式的运算求值
- 微服务架构的分布式事务解决方案
- Parquet
- Apache服务器的下载与安装
- signal() 函数详解
- 结合Handler加深理解内存泄漏
- 栈的应用之后缀表达式的求值
- 设计模式之一----策略模式
- centOS 7安装Redis
- JMeter性能测试,完整入门篇
- Less 原理
- Java 8新特性终极指南
- 安卓ios开发尺寸对应关系
- 线性模型python代码
- TensorFlow 资料外链