C语言实现四则运算

@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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值