m0_61967110 2022-10-01 11:26 采纳率: 50%
浏览 41
已结题

这代码如何改呢好几天了

img


#include<stdio.h>
#include<stdlib.h>
typedef struct Operandtype
{
    double data;
    char operator;
    int type;
    struct Operandtype *next;
    
}Operandtype,*Linkedlist;
typedef struct LinkedstackNode
{
  double data;
    struct LinkedstackNode *next;
}LinkedstackNode,*Linkedstack;
Linkedlist Init_Linkedlist() ;
Linkedstack Init_Linkedstack();
void calculate(Linkedstack s,char x);
void Push_Linkedstack(Linkedstack s,double x);
void Pop_Linkedstack(Linkedstack s, double *x);
void Push_Linkedlist(Linkedlist s,char x,Linkedlist p);
void evaluatePostfixExpression( Linkedlist expressList, double *result );
int main()
{    double *result=(double *)malloc(sizeof(double)); 
     Linkedlist s=Init_Linkedlist();
     Linkedlist p=s;
     
    char x;
    while(scanf("%c",&x))
      Push_Linkedlist(s,x,p);/*输入中缀表达式数据 */ 
    evaluatePostfixExpression(s,result);/*调用函数进行压栈出栈*/    
    if(*result)
    printf("%.1lf", *result);/*输出结果8*/ 
    else
    printf("0.0");
    
    return 0;    
}

void Push_Linkedlist(Linkedlist s,char x,Linkedlist p)/*输入中缀表达式数据 */ 
{
    Linkedlist L=(Operandtype *)malloc(sizeof(Operandtype));
    if(x>='0'&&x<='9')
    {
        L->data=x-'0';
        L->type=0;
    }
    else
    
    {
        L->operator=x;
        L->type=1;
    }
    L->next=NULL;
    p->next=L;
    p=p->next;
    
}

Linkedlist Init_Linkedlist()//建立链栈 
{
    Operandtype *top=(Operandtype *)malloc(sizeof(Operandtype));
    top->next=NULL;
    return top;
    
    
}
void evaluatePostfixExpression( Linkedlist expressList, double *result )
{ Linkedlist F;
   F=expressList->next;
   Linkedstack  top;
   top=Init_Linkedstack();
   while(F!=NULL)
   {
       if(F->type==0)
       {
           Push_Linkedstack(top,F->data);
        } 
        else calculate(top,F->operator);
        
    } 
    Pop_Linkedstack(top, result);
    
}
Linkedstack Init_Linkedstack()
{
    LinkedstackNode *t=(LinkedstackNode *)malloc(sizeof(LinkedstackNode));
    t->next=NULL;
    return t; 
}
void Push_Linkedstack(Linkedstack s,double x)
{
    Linkedstack O;
    O=(Linkedstack )malloc(sizeof(LinkedstackNode));
    O->data=x;
    O->next=s->next;
    s->next=O;
}
void Pop_Linkedstack(Linkedstack s,double *x)
{
    Linkedstack t;
    t=s->next;
    *x=t->data;
    s->next=s->next->next;
    free(t);
}
void calculate(Linkedstack s,char x)//运算 
{
    double a,b,result;
    Pop_Linkedstack(s, &a);
    Pop_Linkedstack(s, &b);
    switch(x)
    {
        case '+':
            result = b + a;
            break;
        case '-':
            result = b - a;
            break;
        case '*':
            result = b * a;
            break;
        case '/':
            if(a)
            result = b / a;
            else
            result = 0;
            break;
    }
    Push_LinkedStack(s, result);
}

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-01 13:02
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 修改了问题 10月1日
  • 修改了问题 10月1日
  • 展开全部

悬赏问题

  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)