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

大理建设工程信息网站网站建设 长沙开福区

大理建设工程信息网站,网站建设 长沙开福区,哈尔滨市建设工程信息网官网,wordpress分类添加关键词分享一下我老师大神的人工智能教程#xff01;零基础#xff0c;通俗易懂#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识#xff0c;造福人民#xff0c;实现我们中华民族伟大复兴#xff01;本文章的解决方法参考了《大话数据结构》中关…分享一下我老师大神的人工智能教程零基础通俗易懂http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识造福人民实现我们中华民族伟大复兴本文章的解决方法参考了《大话数据结构》中关于栈的应用介绍值得注意的是书中关于中缀表达式转后缀的讲解中不尽清楚。本人也在这里花了点时间进行推敲错误的原因也在网上搜到了这篇文章比较好地介绍了中缀转后缀的的规则原理用计算机求解四则运算可以使用栈。因为栈的“先进后出”的特性正好满足了能通过后缀表达式去计算出四则运算式子的结果。而后缀表达式的转化也能使用栈对中缀表达式进行操作从而转化。明显地由中缀表达式-》后缀表达式 后缀表达式-》式子结果。 都需要使用到栈。所以编码实现中我们着重的是实现这两个过程的函数infix_to_suffix()、suffix_to_result()注意测试数据每个数可以是只达个位的数也可以达十位以上的数可以是负数或正数负数需在两边添加括号括号内能存在多个括号例( ( 2 3 ) ( 4 5 ) ( ( 6 7 ) 8 ) )实现定义了一个全局table用来存储各个运算符的优先级。 - 等优先级* / 等优先级 不存在优先级这里主要为了代码实现而取消其优先级设置了一个 priority 变量进行存储栈顶元素的优先级这在中缀转后缀的时候被使用到并在每次的压栈出栈后都须对新的栈顶元素进行记录其优先级在中缀转后缀的函数中主要包含这几部分1. 遇到数字直接输出然后continue  2.左括号直接压栈然后continue 3.右括号则将将栈中在左括号以上的所有运算符弹出然后continue  4. 若是运算符判断是否优先级比栈顶元素小或相等若是则将在左括号前或优先级大于或等于待压栈元素的栈中元素出栈。若不是则正常压栈正常压栈过程中需判断是否负数  5.遍历中缀表达式结束后将栈中还存在的所有元素进行出栈#include stdio.h#include stdlib.h#include string.hconst int MAXSIZE 100;//栈的数据结构typedef struct { int    data[MAXSIZE]; int    top;} Stack;int    table[] {0,0,2,1,0,1,0,2};//查询运算符优先级表//函数说明将中缀表达式转换为后缀表达式//参数说明//sta    转换过程需使用的栈空间//infix  待转换的中缀表达式//suffix 存储转换后的后缀表达式//length 记录后缀表达式的长度void infix_to_suffix(Stack *sta, char *infix, int *suffix, int *length);//函数说明将后缀表达式转换为结果直接返回//参数说明//sta    转换过程需使用的栈空间//suffix 存储转换后的后缀表达式//length 记录后缀表达式的长度int  suffix_to_result(Stack *sta, int *suffix, int length);void init(Stack *sta);//栈空间初始化int main(){ //这里将标准输入输出流重定向到文件中// freopen(in.txt, r, stdin);// freopen(out.txt, w, stdout); Stack     sta; int       length; int       result;         //接受后缀表达式转换的结果 int       sstr[MAXSIZE];  //存储后缀表达式 char      istr[MAXSIZE];  //存储中缀表达式 printf(请输入以 - * / 组成的四则运算\n注意负数需要在两旁添加上括号\n); scanf(%s, istr); init(sta); //对栈空间初始化 infix_to_suffix(sta, istr, sstr, length); init(sta); //再次对栈空间初始化 result suffix_to_result(sta, sstr, length); printf(%d\n, result);// fclose(stdin);// fclose(stdout); return    0;}void infix_to_suffix(Stack *sta, char *infix, int *suffix, int *length){ int    i;    //循环变量 int    b 0;   //当数字是十位或以上的时候进行记录 int    j 0;   //suffix数组的下标 int    priority 0; //记录栈顶元素的优先级 //for循环的第三表达式不进行i将其放在每一次的压栈后或直接输出到suffix进行i for (i 0; i strlen(infix); ) {  //如果是数字的话直接放在suffix中,然后continue  if (infix[i] 0 infix[i] 9)  {   b 0;  //谨记每次都需重新赋值为零   while (infix[i] 0 infix[i] 9)   {    b b * 10 (infix[i] - 0);    i;   }   suffix[j] b;   j;   continue;  }  //如果是右括号的话将栈中在左括号以上的所有运算符弹出,然后continue  if (infix[i] 41)  {   while (sta-data[sta-top] ! 40)   {    suffix[j] sta-data[sta-top];    sta-data[sta-top] 0;    sta-top--;    j;   }   sta-data[sta-top] 0;   sta-top--;   //注意出栈后须将新的栈顶元素的优先级记录下来   priority table[sta-data[sta-top] % 10];   i;   continue;  }  //如果是左括号的话直接压栈  if (infix[i] 40)  {   sta-top;   sta-data[sta-top] infix[i];   //注意压栈后须将新的栈顶元素的优先级记录下来   priority table[sta-data[sta-top] % 10];   i;   continue;  }  //如果只是普通的运算符则压栈  if (infix[i] 42 infix[i] 47)  {   //首先比较栈顶元素的优先级是否比入栈元素优先级要大   //如果是大于的话则从栈顶将元素依次出栈后把待入栈的元素压栈   if (priority table[infix[i] % 10])   {    while (priority table[infix[i] % 10] sta-data[sta-top] ! 40)    {     suffix[j] sta-data[sta-top];     sta-data[sta-top] 0;     sta-top--;     //注意每次的出栈后须将新的栈顶元素的优先级记录下来用作比较     priority table[sta-data[sta-top] % 10];     j;    }    sta-top;    sta-data[sta-top] infix[i];    //注意压栈后须将新的栈顶元素的优先级记录下来    priority table[sta-data[sta-top] % 10];    i;   }   else    {    //这里主要处理负数的提取    if (infix[i] 45 sta-data[sta-top] 40)    {     b 0;     while (infix[i1] 0 infix[i1] 9)     {      b b * 10 (infix[i1] - 0);      i;     }     suffix[j] b * -1;     sta-data[sta-top] 0;     sta-top--;     j;     i 2;     priority table[sta-data[sta-top] % 10];     continue;    }    sta-top;    sta-data[sta-top] infix[i];    //注意压栈后须将新的栈顶元素的优先级记录下来    priority table[sta-data[sta-top] % 10];        i;   }  } } //把栈中还存在的元素进行弹出 while (sta-top ! -1) {  suffix[j] sta-data[sta-top];  sta-top--;  j; } *length j;}int suffix_to_result(Stack *sta, int *suffix, int length){ int    i; int    j; int    result 0; for (i 0; i length; i) {  //循环遍历后缀表达式数字就直接压栈运算符就取栈顶两个元素出来计算并将结果压栈  switch (suffix[i])  {  case 42:   result sta-data[sta-top - 1] * sta-data[sta-top];   sta-top - 1;   sta-data[sta-top] result;   break;  case 43:   result sta-data[sta-top - 1] sta-data[sta-top];   sta-top - 1;   sta-data[sta-top] result;   break;  case 45:   result sta-data[sta-top - 1] - sta-data[sta-top];   sta-top - 1;   sta-data[sta-top] result;   break;  case 47:   result sta-data[sta-top - 1] / sta-data[sta-top];   sta-top - 1;   sta-data[sta-top] result;   break;  default:   sta-top;   sta-data[sta-top] suffix[i];   break;  } } return   result;}//初始化栈空间void init(Stack *sta){ int     i; for (i 0; i MAXSIZE; i) {  sta-data[i] 0; } sta-top -1;}            给我老师的人工智能教程打callhttp://blog.csdn.net/jiangjunshow
http://www.zqtcl.cn/news/162954/

相关文章:

  • 邹平做网站的公司莱芜人才网莱芜招聘
  • 旅行网站开发意义怎样优化网络速度
  • 手机微网站建设多少钱拟定网络设计方案
  • 厦门制作公司网站安卓原生app开发工具
  • worldpress英文网站建设wordpress输出外部文章
  • u9u8网站建设商业公司的域名
  • 有学给宝宝做衣服的网站吗防网站黑客
  • 十大搜索引擎网站微信小程序有什么用处?
  • 团购网站 seo烟台网站建设方案优化
  • 公司网站建设招标文件范本公益永久免费主机
  • 建设银行网站查询企业年金五合一免费建站
  • 做网站开发挣钱吗做网站手机版
  • 网站建设案例精粹 电子书广州白云学校网站建设
  • 良品铺子网站制作用什么软件来做网站
  • ip直接访问网站 备案哪有深圳设计公司
  • 平面构成作品网站第一设计
  • 济南小程序开发多少钱网站移动端优化工具
  • 大连开发区网站淘宝网站优化实例
  • 张家港建网站的公司做网站犯法了 程序员有责任吗
  • 小型企业网站建设项目浦东新区网站推广公司
  • 上海做网站优化公司ps最好用的素材网站
  • 网站建设品牌推广seo制作公司网站
  • 个人网站服务器一年多少钱科技让生活更美好作文450字
  • 开学第一课汉字做网站网盘资源搜索神器
  • 备案网站应用服务树莓派用来做网站
  • 找装修公司上什么网站湘潭交通网站
  • php网站服务建设网站增加关键字
  • 免费视频网站制作泰州东方医院
  • 单位的网站怎样设计才美观手机开发者选项
  • 网站可以做软件检测吗重庆潼南网站建设价格