中缀表达式求值、后缀表达式求值、中缀转后缀、前缀

1.中缀表达式求值

两个栈:OPND(double类数),OPTR(操作符)。
需要比较栈里和栈外ch的操作符优先级。
运用到atof()函数(stdlib.h),将*char 转换为 double。

#include<iostream>
#include<iomanip>
#include<string.h>
#include<stdlib.h>
using namespace std;
 

#define MAXSIZE 1000

typedef struct
{
	double *base;
	double *top;
	int stacksize;
}SqStack_d;

void Init(SqStack_d &S)
{
	S.base = new double[MAXSIZE];
	S.top = S.base;
	S.stacksize = MAXSIZE;
}

void Push(SqStack_d &S, double e)
{
	if(S.top - S.base != S.stacksize)
	{
		*S.top  = e;
		S.top++;
	}
}

void Pop(SqStack_d &S, double &e)
{
	if(S.top !=S.base)
	{
		S.top--;
		e = *S.top;
	}
}

double GetTop(SqStack_d S)
{
	if(S.base !=S.top)
	{
		return *(S.top-1);
	}
}


typedef struct
{
	char *base;
	char *top;
	int stacksize;
}SqStack_c;

void Init(SqStack_c &S)
{
	S.base = new char[MAXSIZE];
	S.top = S.base;
	S.stacksize = MAXSIZE;
}

void Push(SqStack_c &S, char e)
{
	if(S.top - S.base != S.stacksize)
	{
		*S.top  = e;
		S.top++;
	}
}

void Pop(SqStack_c &S, char &e)
{
	if(S.top !=S.base)
	{
		S.top--;
		e = *S.top;
	}
}

char GetTop(SqStack_c S)
{
	if(S.base !=S.top)
	{
		return *(S.top-1);
	}
}


bool In( char ch)
{
	if(ch>='0'&&ch<='9')
	{
		return true;
	}
	else return false;
}


char Com(char c1,char c2)	//c1:in c2:out or ch
{
	if((c1=='('&&c2==')')||(c1=='='&&c2=='='))
		return '=';
	else if(((c1=='+'||c
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值