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

网站开发与电子商务网站建设 新闻

网站开发与电子商务,网站建设 新闻,公司网站如何更改内容,wordpress minfy一、基本概念 中缀表达式#xff1a;运算符都在运算数之间的表达式#xff0c;也就是我们日常见到的表达式#xff0c;包含括号。例如#xff1a;(12)*5 后缀表达式#xff1a;别称逆波兰式#xff0c;指的是严格从左向右按照运算符出现的顺序进行计算#xff0c;不包…一、基本概念 中缀表达式运算符都在运算数之间的表达式也就是我们日常见到的表达式包含括号。例如(12)*5 后缀表达式别称逆波兰式指的是严格从左向右按照运算符出现的顺序进行计算不包含括号运算符都放在运算对象的后面的。例如1 2 5 * 就是一个后缀表达式是由前面中缀表达式的例子转换的。 为什么要转换成后缀表达式中缀表达式不行吗 那是因为对于一个中缀表达式 58/2 我们人可以轻易知道各运算的次序得到答案 9 可是计算机不能计算机很笨所以需要转换成后缀表达式 5 8 2 / 这样计算机就能在不考虑各符号优先级的情况下也得出答案 9计算机从左向右遍历将5、8、2入栈遇到 / 将8、2出栈将 8/2 的结果入栈此时栈中有 5 4 遇到 将5、4出栈将 54 的结果入栈遍历完了栈中有 9这就是答案。 二、中缀表达式转后缀表达式----栈的应用 思路先从左向右遍历整个中缀表达式 1、如果是运算数直接输出到后缀表达式 2、遇到左括号 ( 压入栈中把左括号当做优先级最低的符号 3、遇到右括号 ) 意味着括号中的运算结束了将运算符一个一个弹出栈顶并且输出到后缀表达式直到遇到左括号但是左括号不加入到后缀表达式 4、对于运算符 - * /         1.如果优先级大于栈顶的运算符或者栈为空时入栈         2.否则即优先级小于等于栈顶的运算符就将栈顶依次弹出到后缀表达式中去直到满足入栈条件。 此时是优先级最低的符号 遍历完中缀表达式后可能栈中还存有运算符依次弹出直至栈空。 转换过程分析以(35)*3-2/1为样例结果是3 5 3 * 2 1 / - 1.遍历到(入栈 后缀表达式为 栈中元素( 2.遍历到3输出到后缀表达式 后缀表达式为3 栈中元素( 3.遍历到优先级1大于栈顶元素(的优先级入栈 后缀表达式为3 栈中元素( 4.遍历到5输出到后缀表达式 后缀表达式为3 5 栈中元素( 5.遍历到)一直出栈输出到后缀表达式直到遇到(但是(不加入后缀表达式 后缀表达式为3 5 栈中元素 6.遍历到*栈为空入栈 后缀表达式为3 5 栈中元素* 7.遍历到3输出到后缀表达式 后缀表达式为3 5 3 栈中元素* 8.遍历到-小于等于*的优先级*出栈输出到后缀表达式-入栈 后缀表达式为3 5 3 * 栈中元素- 9.遍历到2输出到后缀表达式 后缀表达式为3 5 3 * 2 栈中元素- 10.遍历到//的优先级大于-入栈 后缀表达式为3 5 3 * 2 栈中元素-/ 11.遍历到1输出到后缀表达式 后缀表达式为3 5 3 * 2 1 栈中元素-/ 12.遍历完了可是栈未空出栈直至栈空 后缀表达式为3 5 3 * 2 1 / - 栈中元素  至此结束 。 三、代码 转换代码 int priority(char ch) //返回优先级-优先级越高值越大 {if (ch (){return 0;}else if (ch || ch -){return 1;}else // * /{return 2;} }void trans(string arr1, string arr2) {Stack stack;initStack(stack);DateElem e ; //用于传出栈中元素for (int i 0; i arr1.size(); i) //每次arr2加入元素后都加一个空格以分割{if (arr1[i] ) //跳过空格{continue;}if(arr1[i] 0 arr1[i] 9) //情况1{while (arr1[i] 0 arr1[i] 9){arr2.push_back(arr1[i]);i;}arr2.push_back( );i--; //因为当不是数字时i也了i等下循环中还要所以得--}else if (arr1[i] ( ) //情况2{pushStack(stack, arr1[i]);}else if (arr1[i] )) //情况3{while (!IsEmpty(stack) getTop(stack)!(){popStack(stack, e);arr2.push_back(e);arr2.push_back( );}if(getTop(stack) ()popStack(stack,e); //将 ( 弹出栈}else //情况4{while (!IsEmpty(stack) priority(getTop(stack) ) priority( arr1[i] )) //栈不为空 并且 栈顶元素优先级大于等于遍历的字符{popStack(stack, e);arr2.push_back(e);arr2.push_back( );}pushStack(stack, arr1[i]); //循环结束就满足入栈条件栈为空 或者 优先级小于栈顶元素}}while (!IsEmpty(stack)) //输出栈中剩余的元素{popStack(stack, e);arr2.push_back(e);arr2.push_back( );}return;} 全部代码 #define _CRT_SECURE_NO_WARNINGS 1#include iostream #include stringusing namespace std;//栈的数据结构定义 #define MAX_SIZE 120typedef char DateElem; typedef struct _Stack {DateElem* top;DateElem* base; }Stack;//初始化栈 bool initStack(Stack s) {s.base new DateElem[MAX_SIZE];if (!s.base) return false; //空间分配失败s.top s.base; //空栈return true; }//入栈 bool pushStack(Stack s, DateElem e) {if (!s.base || (s.top - s.base) MAX_SIZE) return false; //栈没建立 或者 栈满了*(s.top) e;return true; }//出栈 bool popStack(Stack s, DateElem e) {if (!s.base || s.base s.top) return false;e *(--s.top); //先将栈顶元素赋值给e栈顶指针再移动因为栈顶指针都是指向栈顶元素的后一个位置return true; }//获取栈顶元素 DateElem getTop(Stack s) {if (s.top s.base) //栈不为空{return *(s.top - 1);}else{cout 栈为空 endl;return 1;} }//判断栈是否为空 bool IsEmpty(Stack s) {if (s.base s.top){return true;}else{return false;}}//获取栈中元素的个数 int getLength(Stack s) {return (int)(s.top - s.base); }//销毁栈 void destoryStack(Stack s) {//与初始化栈一一对应if (s.base ! NULL) //有效{delete s.base;s.base s.top NULL;}}int priority(char ch) //返回优先级-优先级越高值越大 {if (ch (){return 0;}else if (ch || ch -){return 1;}else // * /{return 2;} }void trans(string arr1, string arr2) {Stack stack;initStack(stack);DateElem e ; //用于传出栈中元素for (int i 0; i arr1.size(); i) //每次arr2加入元素后都加一个空格以分割{if (arr1[i] ) //跳过空格{continue;}if(arr1[i] 0 arr1[i] 9) //情况1{while (arr1[i] 0 arr1[i] 9){arr2.push_back(arr1[i]);i;}arr2.push_back( );i--; //因为当不是数字时i也了i等下循环中还要所以得--}else if (arr1[i] ( ) //情况2{pushStack(stack, arr1[i]);}else if (arr1[i] )) //情况3{while (!IsEmpty(stack) getTop(stack)!(){popStack(stack, e);arr2.push_back(e);arr2.push_back( );}if(getTop(stack) ()popStack(stack,e); //将 ( 弹出栈}else //情况4{while (!IsEmpty(stack) priority(getTop(stack) ) priority( arr1[i] )) //栈不为空 并且 栈顶元素优先级大于等于遍历的字符{popStack(stack, e);arr2.push_back(e);arr2.push_back( );}pushStack(stack, arr1[i]); //循环结束就满足入栈条件栈为空 或者 优先级小于栈顶元素}}while (!IsEmpty(stack)) //输出栈中剩余的元素{popStack(stack, e);arr2.push_back(e);arr2.push_back( );}return;} int main(void) {Stack stack;initStack(stack);string arr1 ;string arr2 ;cout 请输入中缀表达式; //((12)*3)-(6-5)getline(cin, arr1);trans(arr1, arr2);cout 转为后缀表达式为; //1 2 3 * 6 5 - -cout arr2 endl;return 0; } 其中包括了栈的代码你也可以使用库中的栈。
http://www.yutouwan.com/news/294229/

相关文章:

  • 网页制作模板的网站免费中国能源建设集团有限公司子公司
  • 做网站的目标是什么网页布局实例
  • 青海建设厅网站证件查询谷歌网站推广好做吗
  • 做阿里巴巴网站卖货咋样门户网站前台页面
  • 新网站建设咨询如何选择o2o网站建设
  • 旅游网站设计源码个人求职网站设计
  • 360网站卖东西怎么做的自己做网站app
  • 股票做空网站网站建设合同的验收表
  • 百度站长平台怎么验证网站自助建站系统搭建
  • 一站式企业网站建设iis服务器网站301重定向怎么做
  • 邵武网站建设昆明seo和网络推广
  • 地板网站代码网站开发设计的技术
  • 佛山网站建设官网个人博客排名
  • 凡科建站登录入口vultr怎么建设影视网站
  • 企业如何建站做网站张家口
  • 网站水军怎么做网页设计公司哪里会需要翻译
  • 做网站一年大概的盈利大型网站开发考试
  • 云南省建设测量员注册网站淘宝基地网站怎么做
  • 网站自己做余额充值自动扣款wordpress 允许ping
  • asp网站开发视频昆明好的网站开发公司
  • 南阳移动端网站制作cms建站方案
  • 三端互通传奇手游找服网站长春网站设计策划书
  • 河南省建设监理协会官网站无货源电商怎么做新手入门
  • 新建的网站可以百度推广wordpress关闭多版本
  • 关于做女装的网站软件开发专业用什么笔记本
  • 重庆免费公司建网站wordpress 缓存插件
  • 免费企业网站建设word网站建设终身不用维护
  • 简单三栏网站WordPress 教育模板
  • 国内网站域名吗谷歌推广公司
  • 网站首选域301如何做网站的构成要素