栈应用_将算式转成按运算符优先级分布(代码、分析、汇编)

目录:

    • 代码:
    • 分析:
    • 汇编:

代码:

LinkList.h
LinkList.c
LinkStack.h
LinkStack.c
栈-线性表

main.c

#include <stdio.h>
#include "LinkStack.h"/*
该程序将 正常的算式 转换成按照运算符优先分布的算式
比如:9+(3-1)*5+8/2  转换成  931-5*+82/+
注意:正常算式 只能是一位数*/int isNumber(char c)//定义检测是否数字函数
{return ('0' <= c) && (c <= '9');
}int isOperator(char c)//定义检测是否加减乘除运算符
{return (c == '+') || (c == '-') || (c == '*') || (c == '/');
}int isLeft(char c)//定义检测是否左边括号函数
{return (c == '(');
}int isRight(char c)//定义检测是否右边括号函数
{return (c == ')');
}int priority(char c)//定义检测运算符的优先级函数
{int ret = 0;if( (c == '+') || (c == '-') ){ret = 1;}if( (c == '*') || (c == '/') ){ret = 2;}return ret;
}void output(char c)//定义输出字符函数
{if( c != '\0' ){printf("%c", c);}
}void transform(const char* exp)
{LinkStack* stack = LinkStack_Create();//创建栈int i = 0;while( exp[i] != '\0' ){if( isNumber(exp[i]) )//如果是数字{output(exp[i]);//输出该字符}else if( isOperator(exp[i]) )//如果是加减乘除运算符{//如果这个运算符比之前的运算符优先级小或相等//输出这些运算符,相当运算之前的运算符先,因为从左到右运算的,字符串检测也是从左到右每个字符检测while( priority(exp[i]) <= priority((char)(int)LinkStack_Top(stack)) ){output((char)(int)LinkStack_Pop(stack));//将上一个运算符出栈,然后将其输出}LinkStack_Push(stack, (void*)(int)exp[i]);//将该运算符进栈} else if( isLeft(exp[i]) )//如果是左边括号{LinkStack_Push(stack, (void*)(int)exp[i]);//将该符号进栈} else if( isRight(exp[i]) )//如果是右边括号 {//下面就相当将括号里面的运算符先运算char c = '\0';//定义结束符 没有使用while( !isLeft((char)(int)LinkStack_Top(stack)) )//如果不是左边括号{output((char)(int)LinkStack_Pop(stack));//一直执行数据出栈}LinkStack_Pop(stack);//再执行数据出栈一次,将左边括号出栈了printf("size=%d  ", LinkStack_Size(stack));}else{printf("Invalid expression!");break;}i++;}while( (LinkStack_Size(stack) > 0) && (exp[i] == '\0') )//如果每个字符执行完。栈内还有数据{output((char)(int)LinkStack_Pop(stack));//一直执行出栈。清空了栈}LinkStack_Destroy(stack);//销毁栈
}int main()
{transform("9+(3-1)*5+8/2");printf("\n");getchar();return 0;
}

分析:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

汇编:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

课堂笔记(一)

1&#xff0c;怎样查询函数的用法 help(函数名) 2&#xff0c;表达式float(0b1100010101)float(0o1425)float(0x315)的结果是什么&#xff0c;并说明原因 True 浮点类型的数用二进制八进制十六进制的不同表达 3&#xff0c;oct()方法 转换八进制输出 4&#xff0c;hex()方…

[转]深入浅出Java设计模式之备忘录模式

本文转自&#xff1a;http://dev.yesky.com/450/2070450.shtml 一、引子   俗话说&#xff1a;世上难买后悔药。所以凡事讲究个“三思而后行”&#xff0c;但总常见有人做“痛心疾首”状&#xff1a;当初我要是……。如果真的有《大话西游》中能时光倒流的“月光宝盒”&#…

递归问题(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; main.c #include <stdio.h>//该程序使用递归将字符串从后往前依次输出void reverse(char* s) {if( (s ! NULL) && (*s ! \0) ){reverse(s 1);printf("%c", *s);…

递归-裴波那契数列(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; main.c #include <stdio.h>//该程序输出裴波那契数列 int fibonacci(int n) {if( n > 1 ){return fibonacci(n-1) fibonacci(n-2);//注意&#xff1a;这里调用是一直调用左边函…

经典例题(一)

1&#xff0c;已知复数 x 6 8j 请写出它的模、实部、虚部及共轭复数的命令&#xff0c;并写出运行结果。 X 6 8j print("模为:%d"% abs(X)) print("实部为:%s"% X.real) print("虚部为:%s"% X.imag) print("共轭复数为:%s"% X.co…

递归-汉诺塔(代码、分析、汇编)

代码&#xff1a; #include <stdio.h>void hanoi(int n, char a, char b, char c) {if( n > 0 ){if( n 1 ){printf("%c -> %c\n", a, c);}else{hanoi(n-1, a, c, b);printf("%c -> %c\n", a, c);hanoi(n-1, b, a, c);}} }int main() {han…

if语句(四)

1&#xff0c;简单if示例 phones [iphone,xiaomi,huawei,smartisan] for phone in phones:if phone huawei:print(phone.upper())#将字符串的所有字母大写else:print(phone.title())#将字符串中的每个单词的首字符大写效果图如下&#xff1a; 2&#xff0c;if条件测试 ph…

welcome to my blog

转载于:https://www.cnblogs.com/jiangjun/archive/2012/10/22/2734600.html

递归-输出字符串所有的组合情况(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; #include <stdio.h>/*程序描述&#xff1a;输出字符串所有的组合情况使用permutation函数进行将指定的下标值&#xff0c;与最大下标值这个范围的每个下标值进行交换每调用一次permu…

递归-计算字符串长度(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; main.c #include <stdio.h>//该程序用递归计算字符串长度int strlen(const char* s) {if( s NULL ){return -1;}else if( *s \0 ){return 0;}else{return strlen(s1) 1;} }int m…

Python-杨辉三角

在控制台输出如图所示一个8层的杨辉三角。 杨辉三角介绍&#xff1a; 每个数等于它上方两数之和 每行数字左右对称&#xff0c;由1开始逐渐变大 第n行的数字有n项&#xff0c;将n取8 def yanghui(n):l[1,1]for x in range(1,n):for a in range(x):l[a]l[a]l[a1]l.insert(0,1)…

如何向妻子解释OOD(转)

前言 此文译自CodeProject上<How I explained OOD to my wife>一文&#xff0c;该文章在Top Articles上排名第3&#xff0c;读了之后觉得非常好&#xff0c;就翻译出来&#xff0c;供不想读英文的同学参考学习。 作者(Shubho)的妻子(Farhana)打算重新做一名软件工程师(她…

不安全代码和指针资料汇编

不安全代码和指针&#xff08;C# 编程指南&#xff09;为了保持类型安全&#xff0c;默认情况下&#xff0c;C# 不支持指针运算。不过&#xff0c;通过使用 unsafe 关键字&#xff0c;可以定义可使用指针的不安全上下文。有关指针的更多信息&#xff0c;请参见主题指针类型。 注…

ffmpeg-从flv文件中提取AAC音频数据保存为文件

AAC ADTS格式协议&#xff1a; 从flv文件中提取AAC音频数据保存为文件。 如果需要详细了解AAC ADTS格式&#xff0c;可以查询文档。 原文件&#xff1a; 提取aac文件&#xff1a; main.c #include <stdio.h> #include <libavutil/log.h>> #include <lib…

N Queen(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; main.c #include <stdio.h>/* 程序描述&#xff1a;输出N*N中符合左右对角线与上下左右方向都没被使用的位置在每一行的所有情况使用检测左上角&#xff0c;正上角&#xff0c;右上…

Python-身份证核对

中华人民共和国居民身份证号码由17 位数字和1位校验码组成。其中&#xff0c;前6位为所在地编号&#xff0c;第7~14 位为出生年月日&#xff0c;第15~17位为登记流水号&#xff0c;其中第17位偶数为女性&#xff0c;奇数为男性。校验码的生成规则如下: 将前面的身份证号码17位数…

树存储结构(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; LinkList.h LinkList.c 线性表 GTree.h #ifndef _GTREE_H_ #define _GTREE_H_typedef void GTree;//定义树类型 typedef void GTreeData;//定义节点中存放数据的类型 typedef void (GTre…

二元矩阵峰值搜索_好斗的牛(二元搜索)

二元矩阵峰值搜索A farmer has built a long barn with N stalls. The stalls are placed in a straight manner at positions from x1, x2, ...xN. But his cows (C) are aggressive and don’t want to be near other cows. To prevent cows from hurting each other, he wan…

Python---冒泡排序、选择排序

冒泡排序 依次输入n个数&#xff0c;进行冒泡排序 冒泡排序法&#xff0c;即两个相邻的进行比较&#xff0c;比较之后换位置 def bubbleSort(arr):n len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j1] :arr[j], arr[j1] arr[j1], arr[j]arr[] n…

react js 添加样式_如何在React JS Application中添加图像?

react js 添加样式Hello! In this article, we will learn how to add images in React JS? I remember when I just started coding in React JS, I thought adding images would be done exactly as it is in HTML. I later realized that it was different. 你好&#xff0…