C语言实现用栈解决表达式求值(中缀转后缀+后缀求值) 您所在的位置:网站首页 用栈实现中缀表达式求值 C语言实现用栈解决表达式求值(中缀转后缀+后缀求值)

C语言实现用栈解决表达式求值(中缀转后缀+后缀求值)

2024-07-11 14:47| 来源: 网络整理| 查看: 265

1、在vscode实现的,文件后缀是C++,写的时候纯C。

2、关于加入负数的计算,有BUG,因为操作数的缺省,导致栈空,会出错。但是可以实现(0-2)*(0-3)这样的含负数表达式。

3.关于小数的计算,看了其他文章,改下栈数据的类型,没试。

4、prinf1111\2222\5555之类,作为个人对代码的验证

5、代码编写参考:发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149219.html原文链接:https://javaforall.cn

#include typedef struct node { int data; struct node *next; }StackNode,*PStackNode; typedef struct { PStackNode top; }LinkStack,*PLinkStack; PLinkStack InitStack(void) { PLinkStack S; S = (PLinkStack)malloc(sizeof(LinkStack)); if(S) S->top = NULL; return S; } bool IsEmpty(PLinkStack S) { if(!S) { printf("栈不存在!\n"); return false; } if(S->top == NULL) return true; else return false; } bool PushStack(PLinkStack S,int x) { if(!S) { printf("栈不存在!\n"); return false; } PStackNode p; p = (PStackNode)malloc(sizeof(StackNode)); if(!p) { printf("申请内存失败!\n"); return false; } p->data = x; p->next = S->top; S->top = p; return true; } bool PopStack(PLinkStack S,int *x) { if(!S) { printf("栈不存在!\n"); true; } if(IsEmpty(S)) { printf("栈空!\n"); true; } PStackNode p; p = S->top; *x = p->data; S->top = p->next; free(p); return true; } int GetTopElem(PLinkStack S) { if(!S) { printf("栈不存在!\n"); return -9999; } if(IsEmpty(S)) { printf("栈空!\n"); return -9999; } return (S->top->data); } bool DestroyStack(PLinkStack *S) { PStackNode p,q; if(*S) { p = (*S)->top; while(p) { q = p; p = p->next; free(q); } free(*S); } *S = NULL; return true; } //怕是否为数字 int IsNum(char c) { if(c>='0' && c Priority(GetTopElem(S1))) { printf("2222\n"); PushStack(S1,str[i]); i++; } else { while(Priority(str[i])


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有