@huange7
C语言实现四则运算
用C语言实现四则运算(QG第二次训练营作业)
头文件
代码:
#include <stdio.h>
#include<malloc.h>
#include<math.h>
// 返回值结构体
typedef enum Status {
ERROR = 0, SUCCESS = 1
} Status;
// 栈节点结构体
typedef struct StackNode
{
char cData;
double data;
struct StackNode *next;
}StackNode, *LinkStackPtr;
// 链栈
typedef struct LinkStack{
LinkStackPtr top;
int count;
}LinkStack;
Status initLStack(LinkStack *s);//初始化栈
Status isEmptyLStack(LinkStack *s);//判断栈是否为空
double getTopLStackint(LinkStack *s);//得到栈顶元素
char getTopLStackchar(LinkStack *s);//得到栈顶元素
Status destroyLStack(LinkStack *s);//销毁栈
Status pushLStackdouble(LinkStack *s,double data);//入栈
Status pushLStackchar(LinkStack *s,char data);//入栈
Status popLStackdouble(LinkStack *s,double *data);//出栈
Status popLStackchar(LinkStack *s,char *data);//出栈
void inputCheck(int *val); //检查输入
void inputString(char s[]); //字符串的输入
Status checkString(char s[]); //检查字符串的正确
Status convertString(char s1[],char s2[],LinkStack *s); //将中缀表达式转化为后缀表达式
int judgePriority(char a, char b);// 判断符号优先级
double computeString(LinkStack *s1,char s[]);// 计算结果
函数实现
#include "calculatior.h"
Status initLStack(LinkStack *s) //初始化
{
s->count = 0;
s->top = (LinkStackPtr)malloc(sizeof(StackNode));
if(s->top == NULL)
{
printf("\t\t\t\t动态分配内存失败!\n");
return ERROR;
}
else
{
s->top = NULL;
}
return SUCCESS;
}
Status isEmptyLStack(LinkStack *s) //判断链栈是否为空
{
if(s->count == 0)
{
return SUCCESS;
}
return ERROR;
}
Status destroyLStack(LinkStack *s) //销毁栈
{
if(isEmptyLStack(s))
return ERROR;
while(s->top != NULL)
{
LinkStackPtr p = s->top;
s->top = s->top->next;
free(p);
}
s->count = 0;
return SUCCESS;
}
Status pushLStackdouble(LinkStack *s,double data) //入栈
{
LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode));
if(p == NULL)
{
printf("\t\t\t\t动态分配内存失败!\n");
return ERROR;
}
p->data = data;
p->next = s->top;
s->top = p;
s->count ++;
return SUCCESS;
}
Status pushLStackchar(LinkStack *s,char data) //入栈
{
LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode));
if(p == NULL)
{
printf("\t\t\t\t动态分配内存失败!\n");
return ERROR;
}
p->cData = data;
p->next = s->top;
s->top = p;
s->count ++;
return SUCCESS;
}
Status popLStackdouble(LinkStack *s,double *data) //出栈
{
if(isEmptyLStack(s))
return ERROR;
*data = s->top->data;
LinkStackPtr p = s->top;
s->top = p->next;
free