使用栈实现,前缀表达式变后缀表达式的原理,但是没有转换,是边转换边实现:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define MAX_SIZE 50
char num[MAX_SIZE];
//定义数据栈类型
typedef struct data
{
float stack[MAX_SIZE];
int top;
}SD;
//定义运算符栈类型
typedef struct symbol
{
char stack[MAX_SIZE];
int top;
}SS;
//子函数声明
void allocate(char num[], SD *Data, SS *Symb); //数和运算符分类
void check(char c,SD *Data,SS *Symb);//运算符分类处理
int isPra(char c);//判断是括号
int getPri(char c); //计算优先级
void calculate(SD *Data,SS *Symb);//计算栈顶元素
//void symbol(char c,SD *Data,SS *Symb);//c是运算符
//主函数
void main()
{
SD stackData;//定义数据栈
SS stackSymb;//定义运算符栈
stackData.top=-1;//清空数据栈
stackSymb.top=-1;//清空运算符栈
//输入计算公式
printf("*******************************C语言简易计算器******************************\n");
//printf("********************请正确输入计算公式,按回车键结束**********************\n");
//printf("支持单层或嵌套括号运算如:2*(2+3-(6-5))/2,不支持并列括号如:2*(2+3)-(6-5)/2\n");
scanf("%s",&num);//接收输入的公式以字符串形式
//数据分类,数字运算符分类存储
allocate(num, &stackData, &stackSymb);
printf("=%f\n",stackData.stack[stackData.top]);//输出结果
}
void allocate(char num[], SD *Data, SS *Symb)
{
char tnsarr[30]="0";//存放数字字符的临时字符串数组
int