【数据结构】利用栈 求解表达式
来源:互联网 发布:淘宝怎么免费批量发货 编辑:程序博客网 时间:2024/06/11 20:49
表达式求值问题,其中运算符号只包含 加减乘除 取整数 详细请参见代码:
#include <stdio.h>#define MAX_SIZE 100typedef struct {int top;char data[MAX_SIZE];}NumStack;typedef struct {int top;char opera[MAX_SIZE];}OperaStack;const char perior[5][5] = {'>','>','<','<','>','>','>','<','<','>','>','>','>','>','>','>','>','>','>','>','<','<','<','<','<',};void NumPush(NumStack* L,int elem);void OperaPush(OperaStack* L, char elem);int NumPop(NumStack* L);char OperaPop(OperaStack* L);char comp_perior(char a,char b);int compute(int a,int b,char c);int pe2int(char a);void main(){int i = 0;int j = 0;int num = 0;char expression[20] = "14+13-2*9+24/3=";NumStack Num_stack = {0,};OperaStack Opera_stack = {0,};while (expression[i] != '\0'){switch (expression[i]){case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':num = 10*num + (expression[i]-'0');break;case '=':if (expression[i+1] != '\0')return;case '+':case '-':case '*':case '/':NumPush(&Num_stack,num);if (Opera_stack.top == 0 || comp_perior(Opera_stack.opera[Opera_stack.top-1],expression[i]) == '<')OperaPush(&Opera_stack,expression[i]); // 栈空时直接入栈else {do{int temp = compute(NumPop(&Num_stack),NumPop(&Num_stack),OperaPop(&Opera_stack));NumPush(&Num_stack,temp);}while (comp_perior(Opera_stack.opera[Opera_stack.top-1],expression[i]) == '>');OperaPush(&Opera_stack,expression[i]);}num = 0;break;}i++;}printf("计算的结果 = %d\n",Num_stack.data[Num_stack.top-1]);}void NumPush(NumStack* L,int elem){if (L->top+1 < MAX_SIZE)L->data[L->top++] = elem;}void OperaPush(OperaStack* L, char elem){if ((L->top+1) < MAX_SIZE)L->opera[L->top++] = elem;}int NumPop(NumStack* L){if (L->top == 0)return -1;return (L->data[--L->top]);}char OperaPop(OperaStack* L){if (L->top == 0)return -1;return (L->opera[--L->top]);}char comp_perior(char a,char b){return perior[pe2int(a)][pe2int(b)];}int pe2int(char a){switch (a){case '+':return 0;case '-':return 1;case '*':return 2;case '/':return 3;case '=':return 4;default:return -1;}}int compute(int a,int b,char c){switch(c){case '+':return a+b;case '-':return a-b;case '*':return a*b;case '/':return a/b;}}
0 0
- 【数据结构】利用栈 求解表达式
- 数据结构之利用栈将中缀表达式求解后缀表达式
- 利用栈进行表达式求解
- 【数据结构】 利用栈求解 括号匹配问题
- 利用数据结构栈求解迷宫问题
- 利用栈求解迷宫 --数据结构实验
- 数据结构----顺序栈实现逆波兰表达式(后缀表达式)求解
- [推荐]数据结构实习:表达式求解
- 利用堆栈求解算术表达式 利用递归求解算术表达式
- 利用堆栈求解算术表达式
- 利用两个栈求解算数表达式的源代码
- C++表达式求值(利用数据结构栈)
- 数据结构中利用栈计算算术表达式
- c++表达式求值(利用数据结构栈)
- 利用正则表达式求解多项式相乘问题
- 利用二叉树求解表达式的值
- 利用栈对四则运算简单表达式求解的测试(中缀表达式)
- 【数据结构_栈_Stack_1043】利用栈完成后缀表达式计算
- JS实现打字效果
- 替换字符串中的空格
- POJ 1195 Mobile phones(二维树状数组)
- class.getResource()与class.getClassLoader().getResource()
- The run destination My Mac 64-bit is not valid for Running the scheme
- 【数据结构】利用栈 求解表达式
- jin tian xin qing gen tian qi yi yang!
- Zend Studio V10.5.0.v20131105-1526 版本破解
- HDFS 原理、架构与特性介绍
- 题目1183:守形数
- 131 - The Psychic Poker Player(直接枚举)
- iOS7和iOS6适配
- 【分享】2000人上海方言手机语音数据库(样例 女)
- 寒假外企电子厂打工社会实践报告