栈的应用实践之计算机执行后缀表达式
来源:互联网 发布:国家二级c语言成绩 编辑:程序博客网 时间:2024/06/05 10:40
1,算法的思路如下:
2,算法的框架如下:
3,这里我们用到了之前写的栈,这里就不再重复写了,它们是:
LinkList.h
LinkList.c
LinkStack.h
LinkStack.c
4,写一个工程,实现这个算法,main.c 如下:
#include <stdio.h>
#include "LinkStack.h"
int isNumber(char c)
{
return ('0' <= c) && (c <= '9');
}
int isOperator(char c)
{
return (c == '+') || (c == '-') || (c == '*') || (c == '/');
}
int value(char c)
{
return (c - '0');
}
int express(int left, int right, char op)
{
int ret = 0;
switch(op)
{
case '+':
ret = left + right;
break;
case '-':
ret = left - right;
break;
case '*':
ret = left * right;
break;
case '/':
ret = left / right;
break;
default:
break;
}
return ret;
}
int compute(const char* exp)
{
LinkStack* stack = LinkStack_Create();
int ret = 0;
int i = 0;
while( exp[i] != '\0' )
{
if( isNumber(exp[i]) )
{
LinkStack_Push(stack, (void*)value(exp[i]));
}
else if( isOperator(exp[i]) )
{
int right = (int)LinkStack_Pop(stack);
int left = (int)LinkStack_Pop(stack);
int result = express(left, right, exp[i]);
LinkStack_Push(stack, (void*)result);
}
else
{
printf("Invalid expression!");
break;
}
i++;
}
if( (LinkStack_Size(stack) == 1) && (exp[i] == '\0') )
{
ret = (int)LinkStack_Pop(stack);
}
else
{
printf("Invalid expression!");
}
LinkStack_Destroy(stack);
return ret;
}
int main()
{
printf("9 + (3 - 1) * 5 + 8 / 2 = %d\n", compute("931-5*+82/+"));
return 0;
}
小结:
1,中缀表达式是人习惯的表达方式。
2,后缀表达式是计算机喜欢的表达方式。
3,通过栈可以方便的将中缀形式变换为后缀形式。
4,中缀表达式的计算过程类似于程序编译运行的过程
- 栈的应用实践之计算机执行后缀表达式
- 栈的应用实践之中缀表达式转后缀表达式
- 栈的应用之后缀表达式
- 栈的应用之中缀表达式转后缀表达式
- 栈的应用之中缀表达式转换为后缀表达式
- 栈的应用---后缀表达式
- 栈的应用-后缀表达式
- 栈的应用 ---后缀表达式
- 栈的应用之后缀表达式的计算(同时验证是否为合法的后缀表达式)
- 栈的应用之后缀表达式的求解
- 栈的应用之后缀表达式的求值
- 基于栈的应用之计算后缀表达式
- 栈的重要应用之中缀转后缀表达式算法
- 第六周--数据结构--队列的应用之后缀表达式(栈)
- 栈的应用之中缀表达式转后缀
- 栈应用 - 后缀表达式的计算
- hdu 1237 后缀表达式 栈的应用
- 栈的应用1;后缀表达式求解
- 第17周-Problem E: 重复字符串
- 介绍NPTL
- Eclipse无法识别(手机)设备的解决方案
- 字符串的全排列和组合算法
- 什么是线程池
- 栈的应用实践之计算机执行后缀表达式
- Android基础系列之资源(三)
- html基础
- Bmob移动后端云服务平台--Android从零开始--(一)何为Bmob
- Bmob移动后端云服务平台--Android从零开始--(二)android快速入门
- Bmob移动后端云服务平台--Android从零开始--(三)Bmob数据操作((批量)增删改)
- Excel Sheet Column Title
- ubuntu14.10安装eclipse
- 极限编程为什么不适合中国国情?