当前位置: 首页 > news >正文

网站建设hyioi雁塔免费做网站

网站建设hyioi,雁塔免费做网站,温州网站建设 首选国鼎网络好,沈阳市城乡建设部官方网站中缀表达式 中缀表达式#xff08;中缀记法#xff09;是一个通用的算术或逻辑公式表示方法#xff0c;操作符是以中缀形式处于操作数的中间#xff08;例#xff1a;3 4#xff09;#xff0c;中缀表达式是人们常用的算术表示方法。 前缀或后缀记法不同的是#xf…中缀表达式 中缀表达式中缀记法是一个通用的算术或逻辑公式表示方法操作符是以中缀形式处于操作数的中间例3 4中缀表达式是人们常用的算术表示方法。 前缀或后缀记法不同的是中缀记法中括号是必需的。计算过程中必须用括号将操作符和对应的操作数括起来用于指示运算的次序。 后缀表达式 逆波兰表示法Reverse Polish notationRPN或逆波兰记法是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式在逆波兰记法中所有操作符置于操作数的后面因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。 中缀表达式转后缀表达式 中缀转后缀思路 初始化两个栈运算符栈S1操作数栈S2从左向右扫描中缀表达式遇到操作数时将其压入到操作数栈S2遇到运算符时比较其与运算符栈S1栈顶运算符的优先级如果运算符栈S1为空或栈顶运算符为左括号“ ( ”或者优先级比栈顶运算符的优先级较高则直接将此运算符压入栈中否则将运算符栈S1中栈顶的运算符弹入并压到操作数栈S2中再次进行与运算符栈S1栈顶运算符的优先级比较遇到括号时如果遇到了左括号“ ( ”则直接压入运算符栈S1如果遇到右括号“ ) ”则依次弹出运算符栈S1栈顶的运算符并压入操作数栈S2直到遇到左括号 ( 为止此时将这一对括号丢弃重复步骤2至8直到表达式的最右边将运算符栈S1剩余的运算符依次弹出并压入操作数栈S2拼接操作数栈S2中的元素并输出结果即为中缀表达式所对应的后缀表达式 中缀转后缀图示 下图是以9-2*3(5-2)*2为例子的完整过程。 中缀转后缀流程图 中缀转后缀代码分析 主函数 先初始化一下需要转化为后缀记法的字符串然后给一个用来存储后缀表达式的数组假设中缀转后缀的函数为MidtoLast给这个函数传入中缀表达式的字符数组midstr以及存储后缀表达式的字符数组laststr int main() {char midstr[] 9-2*3(5-2)*2;//中缀表达式printf(中缀表达式为%s\n, midstr);char laststr[100];//后缀表达式MidtoLast(laststr, midstr);printf(后缀表达式为%s\n, laststr);return 0; } 遇到操作数 遍历整个中缀字符串数组遇到数字字符就直接进行存储这里我们利用isdigit函数来判断是否数字字符在下面相关总结的部分会为大家详细讲解函数的使用方式这里只先需要知道它的头文件是#include ctype.h for (int i 0; midstr[i] ! \0;)//i有的情况是不的 {if (isdigit(midstr[i]))//数字字符直接放到后缀表达式里{laststr[j] midstr[i];} } 遇到运算符 在遇到运算符的时候遇到第一个操作符就直接压入栈中根据优先级来判断是谁先出栈谁后出栈“*”“/”的优先级高于“”“-”的优先级 遇到括号 并且在遇到操作符不是“)”想要进栈并且栈顶是“(”就直接压入栈中 for (int i 0; midstr[i] ! \0;)//i有的情况是不的 {else if ( top 0 ||midstr[i] ( ||(midstr[i] * || midstr[i] /) (mystack[top - 1] || mystack[top - 1] -) || mystack[top - 1] ( midstr[i] ! )){mystack[top] midstr[i];} } 出栈 遇到“)”并且栈顶元素为“(”则直接抵消 for (int i 0; midstr[i] ! \0;)//i有的情况是不的 {else if (midstr[i] ) mystack[top - 1] ()//直接抵消{i;top--;} } 剩余运算符全部出栈 将栈中的剩余元素都全部依次出栈 else//直接出栈 {laststr[j] mystack[--top]; }while (top 0) {laststr[j] mystack[--top]; }laststr[j] \0;//变为字符串 中缀转后缀完整代码 #include stdio.h #include ctype.hvoid MidtoLast(char* laststr, const char* midstr) {int j 0;//后缀表达式char mystack[100];//模拟栈int top 0;//栈顶指针当前可以存放数据的下标for (int i 0; midstr[i] ! \0;)//i有的情况是不的{if (isdigit(midstr[i]))//数字字符直接放到后缀表达式里laststr[j] midstr[i];else if (top 0 ||midstr[i] ( ||(midstr[i] * || midstr[i] /) (mystack[top - 1] || mystack[top - 1] -) ||mystack[top - 1] ( midstr[i] ! ))mystack[top] midstr[i];else if (midstr[i] ) mystack[top - 1] ()//直接抵消{i;top--;}else//直接出栈laststr[j] mystack[--top];}while (top 0){laststr[j] mystack[--top];}laststr[j] \0;//变为字符串 }int main() {char midstr[] 9-2*3(5-2)*2;//中缀表达式printf(中缀表达式为%s\n, midstr);char laststr[100];//后缀表达式MidtoLast(laststr, midstr);printf(后缀表达式为%s\n, laststr);return 0; }相关知识点 isdigit函数 实例 #include stdio.h #include stdlib.h #include ctype.h int main() {char str[] 1776ad;int year;if (isdigit(str[0])){year atoi(str);printf(The year that followed %d was %d.\n, year, year 1);}return 0; }运行结果
http://www.hkea.cn/news/14394540/

相关文章:

  • 哪个网站找住宿的便宜app联盟推广平台
  • 网站一跳率营业执照怎么申报年报
  • 如何选择网站域名红酒网站源码
  • h5商城网站模板下载陕西网站备案查询
  • 网站友情链接怎么设置百度竞价排名商业模式
  • 网站被备案能建设网店营销网站
  • 网站建设排版规定html网页设计实训报告范文
  • 北海做网站网站建设哪家好华艺网站建设
  • 杭州专门做网站百度竞价代运营
  • 沈阳建设网站宝塔怎么做两个网站
  • 张家口市建设局网站120平三室两厅简约装修
  • 浪潮云网站建设新浪做网站
  • 成都电商网站开发申请做网站_论坛版主
  • 网站建设的基础资料做交易网站需要办什么证
  • 图片怎么做网站背景wordpress 怎么安装ssl
  • 重庆建设网站首页深圳做营销型网站
  • 哪里有门户网站开发做网站地图的步骤
  • 用自己的电脑做网站服务器江西智慧团建登录入口
  • 怎么做自己的简历网站东营网站设计制作
  • 提供网站建设哪家好wordpress如何加菜单
  • wordpress控制面板天津seo网络优化师
  • 杭州网站建设 seo手机壁纸网站源码
  • ps网站首页设计如何策划网络事件营销
  • 揭阳自助建站软件温州设计集团网站建设
  • 如何做网站推广页面查排名
  • 家教网站建设焦作专业做网站公司
  • 做静态网站选用什么服务器营销软文广告
  • 长沙网站推广服务公司百度快照查询
  • 手机网站模板 源码公司网站开发有哪些
  • 重庆快建网站如何用手机制作app课件