资源简介
算法表达式求值.cpp
代码片段和文件信息
#include
#include
#include
#include
#define MaxSize 100
//声明运算符栈类型
typedef struct
{
char data[MaxSize];
int top;
}SqStack1;
//声明操作数栈类型
typedef struct
{
double data[MaxSize];
int top;
}SqStack2;
//初始化运算符栈
void InitStack1(SqStack1 *&s)
{
s=(SqStack1 *)malloc(sizeof(SqStack1));
s->top=-1;
}
//初始化操作数栈
void InitStack2(SqStack2 *&s)
{
s=(SqStack2 *)malloc(sizeof(SqStack2));
s->top=-1;
}
//销毁运算符栈
void DestroyStack1(SqStack1 *&s)
{
free(s);
}
//销毁操作数栈
void DestroyStack2(SqStack2 *&s)
{
free(s);
}
//运算符进栈
bool Push1(SqStack1 *&schar e)
{
if(s->top==MaxSize-1)
{
return false;
}
s->top++;
s->data[s->top]=e;
return true;
}
//操作数进栈
bool Push2(SqStack2 *&sdouble e)
{
if(s->top==MaxSize-1)
{
return false;
}
s->top++;
s->data[s->top]=e;
return true;
}
//运算符出栈
bool Pop1(SqStack1 *&schar &e)
{
if(s->top==-1)
{
return false;
}
e=s->data[s->top];
s->top--;
return true;
}
//操作数出栈
bool Pop2(SqStack2 *&sdouble &e)
{
if(s->top==-1)
{
return false;
}
e=s->data[s->top];
s->top--;
return true;
}
//取运算符栈顶元素
bool GetTop1(SqStack1 *&schar &e)
{
if(s->top==-1)
{
return false;
}
e=s->data[s->top];
return true;
}
//取操作数栈顶元素
bool GetTop2(SqStack2 *&sdouble &e)
{
if(s->top==-1)
{
return false;
}
e=s->data[s->top];
return true;
}
//判断运算符栈是否为空
bool StackEmpty(SqStack1 *s)
{
return(s->top==-1);
}
//将运算符表达式exp转换成后辍表达式postexp
void trans1(char *expchar postexp[])
{
char e;
SqStack1 *Optr; //定义运算符栈
InitStack1(Optr); //初始化运算符栈
int i=0; //i作为postexp的下标
while(*exp!=‘\0‘) //循环至exp扫描完
{
switch(*exp)
{
case ‘(‘: //判定为左括号
Push1(Optr‘(‘); //左括号进栈
exp++; //继续扫描
break;
case ‘)‘: //判定为右括号
Pop1(Optre); //出栈元素e
while(e!=‘(‘) //不为左括号时循环
{
postexp[i++]=e; //将e存放到postexp中
Pop1(Optre); //继续出栈元素e
}
exp++; //继续扫描
break;
case ‘+‘: //判定为加或减
case ‘-‘:
while(!StackEmpty(Optr)) //栈不为空时循环
{
GetTop1(Optre); //取栈顶元素e
if(e!=‘(‘) //e不是左括号
{
postexp[i++]=e; //将e存放到postexp中
Pop1(Optre); //出栈元素e
}
else
{
break;
}
}
Push1(Optr*exp); //将加或减进栈
exp++; //继续扫描
break;
case ‘*‘: //判定为乘或除
case ‘/‘:
while(!StackEmpty(Optr)) //栈不为空时循环
{
GetTop1(Optre); //取栈顶元素e
if(e==‘*‘||e==‘/‘)
{
postexp[i++]=e; //将e存放到postexp中
Pop1(Optre); //出栈元素e
}
else
{
break;
}
}
Push1(Optr*exp); //将乘或除进栈
- 上一篇:c++ 文件操作(读取、写入)
- 下一篇:《一个月挑战C++》.chm
相关资源
- PID算法.c
- QR二维码C++源码 算法实现
- 基于opencv漫水填充算法综合
- 信息学奥赛一本通——算法部分
- 银行家算法分配资源的模拟实现(m
- C语言程序设计50例.docx
- 常见排序算法比较.cpp
- 烟花优化算法(c语言版)
- c++常用游戏算法及数据结构设计
- 深度学习算法地图
- 扫描线多边形填充算法实现
- 基于改进的fcm算法的图像分割vc++
- TLV解析算法
- 《Data Structures and Algorithm Analysis in C
- TOA/AOA定位算法C语言代码
- 算法帝国pdf
- 算法_C语言的实现完整版
- 数值分析算法程序设计 C++实现
- FFT算法c语言代码
- VC++实现RSA加密算法
- AAM算法实现
- 算法竞赛入门经典 第二版刘汝佳著含
- 基于极大似然估计的三维定位算法
- snappy压缩,解压算法
- C语言实现的银行家算法 做了界面
- C++模拟存储器的分配与回收算法实现
- 欧式距离实现的聚类算法
- “背景建模技术”库37种算法
- C++实现RSA加密解密算法
- 圆检测 用霍夫变换算法实现
评论
共有 条评论