通过实验掌握栈的基本操作和中中缀转后缀表达式式求值原理与方法

数据结构 表达式求值(中缀)实验报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数据结构 表达式求值(中缀)实验报告
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩9页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢利用自定义的堆栈类实现中缀表达式的求值及转换为后缀表达式 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 15时,
&无详细内容&
代码片段(3)
Expression.cpp&~&4KB&&&&
#pragma warning(disable:4786)
#include "Myhead.h"
#include "SeqStack.h"
#include &string&
#include &Math.h&
#include &iostream&
#include &map&
ADD='+',SUB = '-', MUL='*',DIV = '/',
template&typename K,typename V&
void mapInit(map&K,V& &m){
m[AA]=GREATER; m[AS]=GREATER; m[AM]=LESSER;
m[AD]=LESSER;
m[AL]=LESSER;
m[AR]=GREATER; m[AE]=GREATER;
m[SA]=GREATER; m[SS]=GREATER; m[SM]=LESSER;
m[SD]=LESSER;
m[SL]=LESSER;
m[SR]=GREATER; m[SE]=GREATER;
m[MA]=GREATER; m[MS]=GREATER; m[MM]=GREATER; m[MD]=GREATER; m[ML]=LESSER;
m[MR]=GREATER; m[ME]=GREATER;
m[DA]=GREATER; m[DS]=GREATER; m[DM]=GREATER; m[DD]=GREATER; m[DL]=LESSER;
m[DR]=GREATER; m[DE]=GREATER;
m[LA]=LESSER;
m[LS]=LESSER;
m[LM]=LESSER;
m[LD]=LESSER;
m[LL]=LESSER;
m[LR]=EQUAL;
m[RA]=GREATER; m[RS]=GREATER; m[RM]=GREATER; m[RD]=GREATER; m[RR]=GREATER; m[RE]=GREATER;
m[EA]=LESSER;
m[ES]=LESSER;
m[EM]=LESSER;
m[ED]=LESSER;
m[EL]=LESSER;
m[EE]=EQUAL;
template&typename K, typename V&
V Precede(char ch1,char ch2,map&K,V& &m){
if (m.empty())
mapInit(m);
char s[3];
s[0] = ch1; s[1] = ch2; s[2] = '\0';
return (V)m[s];
double getNum(char ch){
return ch - '0';
template&typename K,typename V&
double Expression_Eval(const char* str,string &store){
SeqStack&char, 100&
SeqStack&double, 100& OPND;
OPTR.Push(END);
char ch = *str++;
while (ch!=END || OPTR.Top()!=END)
double sum = 0;
double sum1 = 0;
int bits=0;
bool isPoint=
while(ch=='.'||(ch &= '0' && ch &= '9')){
if(!isPoint)
sum = 10 * sum + getNum(ch);
sum1 = sum1+ getNum(ch)* pow((double)10,--bits);
// store.push_back(ch);
store.insert(store.end(),ch);
ch = *str++;
if (ch == '.')
store.insert(store.end(),ch);
ch = *str++;
else if ((ch & '0' || ch & '9')&& ch != '.')
store.insert(store.end(),' ');
OPND.Push(sum+sum1);
map&string, char&
char pre_op = OPTR.Top();
switch (Precede&K, V&(pre_op, ch, m))
case LESSER:
OPTR.Push(ch);
ch = *str++;
case EQUAL:
OPTR.Pop();
ch = *str++;
case GREATER:
double b = OPND.Pop();
double a = OPND.Pop();
pre_op = OPTR.Pop();
// store.push_back(pre_op);
store.insert(store.end(),pre_op);
// store.push_back(' ');
store.insert(store.end(),' ');
OPND.Push(Operate(a, pre_op, b));
cerr &&"表达式输入错误"&&
isMistake =
return OPND.Top();
double Operate(double a,char op,double b){
switch (op)
return a +
return a -
return a *
return a /
bool Test3_4(char* str){
char ch = *
SeqStack&char, 20& OP;
while (ch!='\0')
if (ch == '(' || ch == '[' || ch == '{')
OP.Push(ch);
if (ch == ')' && OP.Top() == '(')
if (ch == ']' && OP.Top() == '[')
if (ch == '}' && OP.Top() == '{')
return OP.isEmpty();
SeqStack&int, 20&
SeqStack&int, 20&
void In(int x){
while (!use.isEmpty()){
tmp.Push(use.Pop());
use.Push(x);
while (!tmp.isEmpty()){
use.Push(tmp.Pop());
int Out(){
return use.Pop();
int main(){
cout && Out() &&
cout && Out() &&
cout && Out() &&*/
/* while (true)
if (Test3_4(const_cast&char *&(input.c_str())))
cout && "true" &&
cout && "false" &&
while (true)
cout && "输入中缀表达式:";
input.insert(input.end(),'@');
// input.push_back('@');
isMistake =
double result = Expression_Eval&string, char&(input.c_str(), store);
if (!isMistake)
cout && "后缀表达式:" && store &&
cout && "结果为" && result &&
SeqStack.h&~&740B&&&&
// SeqStack.cpp : 定义控制台应用程序的入口点。
#include &iostream&
template&class T,int MaxSize&
class SeqStack{
T data[MaxSize];
SeqStack(){
void Push(T t){
isMistake =
if (top == MaxSize - 1) { cerr && "上溢" && isMistake = }
data[++top] =
isMistake =
if (top == -1){ cerr && "下溢" && isMistake = return T(); }
return data[top--];
isMistake =
if (top == -1){ cerr && "下溢" && isMistake = return T(); }
return data[top];
bool isEmpty(){
return top == -1;
bool getisMistake(){ return isM }
Myhead.h&~&1KB&&&&
//#define ADD '+'
//#define SUB '-'
//#define MUL '*'
//#define DIV '/'
#define LEFT
#define RIGHT ')'
#define END '@'
#define AA "++"
#define SS "--"
#define MM "**"
#define DD "//"
#define AS "+-"
#define AM "+*"
#define AD "+/"
#define SA "-+"
#define SM "-*"
#define SD "-/"
#define MA "*+"
#define MS "*-"
#define MD "*/"
#define DA "/+"
#define DS "/-"
#define DM "/*"
#define AL "+("
#define AR "+)"
#define AE "+@"
#define SL "-("
#define SR "-)"
#define SE "-@"
#define ML "*("
#define MR "*)"
#define ME "*@"
#define DL "/("
#define DR "/)"
#define DE "/@"
#define LA "(+"
#define LS "(-"
#define LM "(*"
#define LD "(/"
#define LL "(("
#define LR "()"
//#define LE "(@"
#define RA ")+"
#define RS ")-"
#define RM ")*"
#define RD ")/"
//#define RL ")("
#define RR "))"
#define RE ")@"
#define EA "@+"
#define ES "@-"
#define EM "@*"
#define ED "@/"
#define EL "@("
#define EE "@@"
#define GREATER '&'
#define LESSER
#define EQUAL
开源中国-程序员在线工具:
相关的代码(534)
开源从代码分享开始
momememo的其它代码

我要回帖

更多关于 中缀表达式求值 的文章

 

随机推荐