数据结构课程 经典案例 表达式求值 案例代码

作者:白雪 | 创建时间: 2023-04-10
在学习数据结构这门课当中,我们要学会基本的数据结构运用.学会用栈结构编程表达式,掌握栈的使用方法,表达式求值是一个很经典的案例,下面看一下代码。...
数据结构课程 经典案例 表达式求值 案例代码

操作方法

#include<iostream.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 50 typedef struct{ int top; double array[N]; }NumStack; typedef struct{ int top; char array[N]; }OpStack; int Cint(char mychar){ return (mychar-48); } void PushNum(NumStack *numstack,double num){ numstack->top++; numstack->array[numstack->top-1]=num; } void PopNum(NumStack *numstack,double *num){ *num=numstack->array[numstack->top-1]; numstack->top--; } void PushOp(OpStack *opstack,char op){ opstack->top++; opstack->array[opstack->top-1]=op; } void PopOp(OpStack *opstack,char *op){ *op=opstack->array[opstack->top-1]; opstack->top--; } double Calc(double a,double b,char c){ double result; switch(c){ case '+':result=a+b;break; case '-':result=a-b;break; case '*':result=a*b;break; case '/':result=a/b;break; } return result; } char Priority(char y,char x){ char priority='<'; switch(x){ case '+': case '-':if(y=='(' || y=='#')priority='>';break; case '*': case '/':if(y=='(' || y=='#'|| y=='+' || y=='-')priority='>';break; case '(':priority='>';break; case ')':if(y=='(')priority='=';break; case '#':if(y=='#')priority='=';break; default:priority='E'; } return priority; } void Process(NumStack *numstack,OpStack *opstack,char x){ double a,b;char c; static double tempnum=0;static int len=10;static int dot=0,flags=0; if(isdigit(x) || x=='.'){ if(x=='.')dot=1; else{ if(dot==0) tempnum=tempnum*10+Cint(x); else{ tempnum=tempnum+(double)Cint(x)/len; len*=10; } } } else{ if(flags==0 && x!='('){PushNum(numstack,tempnum);tempnum=0.0;len=10;dot=0;} switch(Priority(opstack->array[opstack->top-1],x)){ case '>':PushOp(opstack,x);flags=0;break; case '<': PopOp(opstack,&c); PopNum(numstack,&b); PopNum(numstack,&a); PushNum(numstack,Calc(a,b,c));flags=1; Process(numstack,opstack,x);break; case '=':PopOp(opstack,&c);flags=1;break; default:cout<<"错误,重新输入!";exit(0); } } } void main(){ NumStack numstack;OpStack opstack;char s[N];int i=0; numstack.top=0;opstack.top=0; PushOp(&opstack,'#'); cout<<"请输入表达式,以 #号结束:"; cin>>s; for(i=0;i<strlen(s);i++) Process(&numstack,&opstack,s[i]); cout<<numstack.array[numstack.top-1]; }

然后调试一下,出现下面的界面,就是调试成功了。

点击展开全文

更多推荐