用c语言利用栈将中缀表达式转化为后缀表达并计算

用c语言利用栈将中缀表达式转化为后缀表达并计算

先是头文件

#ifndef CALCULATOR_H_INCLUDED
#define CALCULATOR_H_INCLUDED
//存取后缀表达式的链表节点
typedef struct expression
{
   
    char c ;
    double a ;
    struct expression *prior;
    struct expression *next;
}E;
//字符栈
typedef  struct StackNode
{
   
	char c;
	struct StackNode *next;
}StackNode, *LinkStackPtr;

typedef  struct  LinkStack
{
   
	LinkStackPtr top;
}LinkStack;
typedef enum Status
{
   
    ERROR = 0,
	SUCCESS = 1
} Status;
//检查输入是否合法
Status ChekStr(char *str);
//输入函数
void s_gets(char *str);
//将中缀表达式转化为后缀表达式
void Change(char *str,E *h,LinkStack *s);
//入栈
void pushLStack(LinkStack *s,char c);
//出栈
void popLStack(LinkStack *s);
//延长存储后缀表达式的链表
void createNext(E *p);
//计算后缀表达式
void answer(E *h);
//销毁链表
void DestroyList(E *h);


#endif // CALCULATOR_H_INCLUDED

接口的实现

#include "calculator.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//输入函数
void s_gets(char * str)
{
   
    fflush(stdin);
    char * ret_val;
    char * find;

    ret_val = fgets(str,100,stdin);
    if(ret_val)
    {
   
        find = strchr(str,'\n');
        if(find) *find = '\0';
        else
            while (getchar() != '\n')
                continue;
    }

}

//检查表达式是否合法
Status ChekStr(char *str)
{
   
    int flag = 1;//标记字符前面非数字符号出现次数
    int right =0;//计算右括号
    int left = 0;// 计算左括号
    int wei = 0; //计算数字位数
    int point = 0;
    char *arr = str;

    while (*arr != '\0'){
   
        if (*arr >= '0' && *arr <= '9')
        {
   
            flag = 0;wei++;
            if (wei == 1) point = 0;
            if(wei >= 12
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值