C语言课设:中缀表达式转后缀表达式并求值(续)
11-20 1828
前天看到有人给我很久之前写的一篇博客《C语言::将中缀表达式转换为后缀表达式并计算结果》指出了一个BUG. 今天闲的没事,就把BUG修复一下,一看那代码写的,不忍直视,那个BUG更是让我啼笑皆非...... 来自: Mac开发修炼之路
堆栈练习——中缀表达式转后缀表达式 */
#include
#include
#include
#include
#define MAX 25
typedef struct node{
char date;
struct node *next
} LinkStake;
typedef struct node2{
float date;
struct node *next;
} Stake;
typedef struct body{
char date[MAX];
int j;
} Body;
LinkStake *CreatStake();//建立空栈
int IsEmpty(LinkStake *s);//判断空栈
void Push(char fuhao, LinkStake *s, Body *p);//压栈
int Judge(bool flag, char c);//判断优先级
LinkStake *CreatStake()
{
LinkStake *s;
s=malloc(sizeof(struct node));
s->next = NULL;
return s;
}
int IsEmpty(LinkStake *s)
{
return(s->next == NULL);
}
void Push(char fuhao, LinkStake *s, Body *p)
{
while(s->next != NULL && Judge(false,fuhao)
LinkStake *t;
printf("%c", s->next->date);
p->date[p->j] = s->next->date;
p->j++;
t = s->next;
s->next = t->next;
free(t);
}
if(IsEmpty(s)){
LinkStake *tmp;
tmp = malloc(sizeof(struct node));
tmp->date = fuhao;
tmp->next = s->next;
s->next = tmp;
}
else if(Judge(false,fuhao)>Judge(true,s->next->date)){
LinkStake *tmp;
tmp = malloc(sizeof(struct node));
tmp->date = fuhao;
tmp->next = s->next;
s->next = tmp;
}
else if(Judge(false,fuhao) == Judge(true,s->next->date)){
LinkStake *t;
t = s->next;
s->next = t->next;
free(t);
}
}
int Judge(bool flag, char c)
{
if(c == ‘+’ || c == ‘-’)
if(flag) return 3;
else return 2;
else if(c == ‘*’ || c == ‘/’)
if(flag) return 5;
else return 4;
else if(c == ‘(’)
if(flag) return 1;
else return 6;
else if(c == ‘)’)
if(flag) return 6;
else return 1;
else return 0;
}
void PushStake(float c, LinkStake* s)
{
Stake *tmp;
tmp = malloc(sizeof(struct node2));
tmp->date = c;
tmp->next = s->next;
s->next = tmp;
}
float PopStake(LinkStake *s)
{
Stake *t;
float c;
t = s->next;
c = t->date;
s->next = t->next;
free(t);
return c;
}
int main()
{
int i = 0;
LinkStake *head;
Body *p = malloc(sizeof(struct body));
char s[MAX];
head = CreatStake();
p->j = 0;
printf("请输入中缀表达式;\n");
gets(s);
printf("转换为后缀表达式: \n");
while(s[i]){
if(s[i]>='0' && s[i]<='9'){
printf("%c", s[i]);
p->date[p->j] = s[i];
p->j++;
}
else Push(s[i],head,p);
i++;
}
while(head->next != NULL){
printf("%c", head->next->date);
p->date[p->j++] = head->next->date;
p->j++;
LinkStake *t;
t = head->next;
head->next = t->next;
free(t);
}
printf("\n");
printf("计算结果为:\n");
Stake *stake;
float sum = 0.0, a, b;
stake = (Stake*)malloc(sizeof(struct node2));
stake->next = NULL;
for(int i = 0; i < p->j; i++){
if(p->date[i]>='0' && p->date[i]<='9')
PushStake((float)(p->date[i]-'0'), stake);
else if(p->date[i]=='+'){
b = PopStake(stake);
a = PopStake(stake);
sum = a+b;
PushStake(sum, stake);
}
else if(p->date[i]=='-'){
b = PopStake(stake);
a = PopStake(stake);
sum = a-b;
PushStake(sum, stake);
}
else if(p->date[i]=='*'){
b = PopStake(stake);
a = PopStake(stake);
sum = a*b;
PushStake(sum, stake);
}
else if(p->date[i]=='/'){
b = PopStake(stake);
a = PopStake(stake);
sum = a/b;
PushStake(sum, stake);
}
}
printf("%.2f", sum);
return 0;
}
11-20 1828
前天看到有人给我很久之前写的一篇博客《C语言::将中缀表达式转换为后缀表达式并计算结果》指出了一个BUG. 今天闲的没事,就把BUG修复一下,一看那代码写的,不忍直视,那个BUG更是让我啼笑皆非...... 来自: Mac开发修炼之路
#include
#include
#include
#include “Myatoi.c”
extern int myatoi(const char *str);
#def…
来自: 铭记_
栈可以用链表实现,也可以用数组实现。
在使用链表实现时,栈顶指针指向链表的前端节点,当栈顶指针为NULL时即为空…
来自: 大树的专栏
#include<stdlib.h>
#include<string.h>
#…
来自: qq_40596811的博客
百度百科
后缀表达式
百度百科
现在大家都知道了什么是中缀表达式,后缀表达式。好,进正题。本文主要是用C语言,来做简单的编程实现转化功能。
例如,输入 :(5+3)*2+(6+3…
来自: a_52hz的博客
在数据结构中, 二叉树的遍历有三种(这里不考虑分层遍历等特殊需求): 前序遍历, 中序遍历和后序遍历. 如果将表达式看做一颗二叉树, 那么中缀表达式, …
来自: lbcab的博客
中缀表达式(或中缀记法)是一个通用的算术或逻辑公式表示方法,
操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。
后缀表达式:…
来自: keepupblw的专栏
…
来自: dgeek的博客
中缀表达式:eg: 9+(3-1)*3+10…
来自: sdr_zd的博客
#include//头文件包含atoi()函数
using namespace std;
typedef char T;
class stack{
T data[1…
来自: qq_33764934的博客
昨天参加了ebay实习生笔试题,其中一道题目给定了前缀表达式,让我们求转换成中缀表达式时辅助栈的做多情况下容乃几个元素以及中缀表达式的值。当时没有做出来,会后后网上查了…
来自: walkerkalr的专栏
表达式一般分为前缀表达式,中缀表达式和后缀表达式。其中我们最为熟悉的是中缀表达式,也就是书本上最常用的表示形式。中缀表达式是将运算符放在两个操作数的中间。
…
来自: Allen Liu
后缀转中缀:
eg:
652 3+8*+3+* >>> 6*((5+(2+3)*8)+3)
实现:
…
来自: Immorwave
①最简单的: 1 + 1
②稍微复杂一点的: 8 – ( 3 + 2 * 6 ) / 5 + 4而后缀表达式(也被称为逆波兰式)则是将运算符放在…
来自: 日复一日,年复一年
String encodeStr = URLEncoder.encode(“中国”, “utf-8”);
System.out.println(“处理后:” + encodeStr…
来自: my_worldlet的博客
05:15,by 舒彩光
只要会C语言编程就很容易为python添加新的内置模块。可以通的C的扩…
来自: liuyukuan的专栏
遇到数字:直接输出遇到’(’:压栈遇到’)’:持续出栈,如果出栈的符号不是’('则输出,否则终止出栈。遇到符号则判断该符号与栈顶符号…
来自: girlkoo的专栏
#include
#include
const int MAX=100;
using namespace std;
char pp[MAX];//存储转换后的后缀表达式
…
来自: 跟随内心的渴望
当输入者输入错误信息的时候需要报错,并说明错误的种类。
#include <iostream>
// cin 为输入 cout 为输出
#include <cstring>
// 用栈 来 处理…
来自: 一样
假设我们计算一个表达式:42+5+67=,他的计算顺序可以是将42的值存为A1,然后将A1和5相加,在将结果存入A1,然后在将67的值存为A2,最后将A1和A2相加,并将结果放入…
来自: weixin_40149557的博客
顺序扫描中缀表达式:
若读入的是一个运算分量,则输出;
若读入的是一个左括号,则入栈,栈中左括号的优先级被视为比任何操作符都低。…
来自: wilver的博客
顺序栈的存储定义
typedef struct stack
{
SElemType *base;//栈底指针
SElemType *top;//栈…
来自: Raskiii的博客
1.简要说明
分析:设操作符栈op栈 操作数栈num栈
op栈里不可能出现’)’,只可能有’+’、’-’、’*’、’/’、’…
来自: 小白的专栏
1000ms
内存限制:
65536kB
描述
The objective of the program you are going to produce is to ev…
来自: wwxy1995的博客
很惭愧的说,这道题我写了好久,断断续续写了一个星期。。。。智商捉急。。。
思路是这样的,后缀表达式不用管计算顺序,但是有一点是在必要的…
来自: wwj
#include
#include
#include
#include
#define Nul 0x00
…
来自: Burette_Lee的博客
题目链接http://acm.nyist.net/JudgeOnline/problem.php?pid=2…
来自: …
过去的十多年,JAVA基本每年都是全世界使用人数第一的语言。全世界数百万的IT企业构建了庞大的JAVA生态圈,大量的软件基于JAVA开发。 JAVA也…
来自: javaniuniu的博客
shell或者linux命令的文件.
象编写高级语言的程序一样,编写一个shell程序需要一个文本编辑器.如VI等.
在文本编辑环境下,依据sh…
来自: AlbenXie的博客
在C语言中取随机数所需要的函数是:
int rand(void);
void srand (unsigned int n);
rand()函数和srand()函数被声明在头文件…
来自: moonsheep_liu的专栏
所有的课程源代码在我上传的资源里面,本来想设置开源,好像不行!博客和专栏同步!
如有错别字或有理解不到位的地方…
来自: 谷子的博客
上一节课我们学习了 颜色与纹理中-将非坐标数据传入顶点着色器
这一节课我们将学习 颜色与纹理中…
来自: 谷子的博客
用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家…
来自: fxbin123的博客
现在越来越流行在线看视频了,但是对于我得收藏癖爱好者,还是希望可以有比较好的资源网站的,尤其是种子、磁力链网站。所以就整理了一份干净、好用的TOP10出来:
先推荐一个下载磁力链的工具:
马…
来自: YXAPP的技术分享
安装完成,打开Webstorm,在弹出的License Activation窗口中选择“License server”,在输入框输入下面的网址:
htt…
来自: 老妖儿的博客
方法一:(更新时间:2018/4/8)v3.3
注册时,在打开的Lice…
来自: 唐大帅的编程之路
Xshell6下载链接:原有的资源链接csdn积分自调整太高了,没办法降。这边给你们重新上传一个,
积分已经设置最低了:https://download.c…
来自: qq_31362105的博客
转载请标明出处: http://blog.csdn.net/forezp/article/details/70148833
本文出自方志朋的博客
错过了这一篇,你可能再也学不会 Sp…
来自: 方志朋的专栏
因公司的需求,需要做一个爬取最近上映的电影、列车号、航班号、机场、车站等信息,所以需要我做一个爬虫…
来自: 昌昌
上一节课我们学习了 颜色与纹理中–彩色三角形
这一节课我们将学习 颜色与纹理中-在图像上贴图片
实…
来自: 谷子的博客
本人正在找深圳Java实习工作,求大佬带飞
——————————————————————————————————————
消费者从Eure…