旅游网站开发哪家好wordpress侧边栏工具
news/
2025/9/23 4:56:57/
文章来源:
旅游网站开发哪家好,wordpress侧边栏工具,网站开发前端与后端的区别,西北电力建设甘肃工程公司网站逆波兰表达式 逆波兰表达式又叫做后缀表达式。在通常的表达式中#xff0c;二元运算符总是置于与之相关的两个运算对象之间#xff0c;这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法#xff0c;按此方法#xff0c;每一运算符… 逆波兰表达式 逆波兰表达式又叫做后缀表达式。在通常的表达式中二元运算符总是置于与之相关的两个运算对象之间这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法按此方法每一运算符都置于其运算对象之后故称为后缀表示。 ab --- a,b, a(b-c) --- a,b,c,-, a(b-c)*d --- a,b,c,-,d,*, ad*(b-c)---a,d,b,c,-,*, 1、将一个中序表达式转化成为逆波兰表达式 构造两个栈S1S2S1用来存放表达式S2用来暂时存放运算符最后完成后该栈是清空的。 1如果遇到的是数字直接进栈S1 2如果遇到的是左括号进栈S2 3如果遇到的是右括号将S2中的运算符全部出栈压入S1中注意括号不压入 4如果遇到的运算符 1.如果此时栈S2为空则直接将运算符加入到栈S2中 2.如果此时栈S2不为空当前运算符的优先级大于等于栈顶运算符的优先级那么直接入栈S2 3.如果此时栈S2不为空当前运算符的优先级小于栈顶运算符的优先级则将栈顶运算符一直出栈压入到栈S1中 直到栈为空或者遇到一个运算符的优先级小于等于当前遍历的运算符的优先级然后将该运算符压入到栈S2中。 5遍历完整个中序表达式之后如果栈S2中仍然存在运算符那么将这些运算符依次出栈压入到栈S1中直到栈为空。 2、利用逆波兰表达式求值 维护一个结果栈S3该栈最后存放的是表达式的值。从左至右的遍历栈S1 1如果遇到的是数字直接将数字压入到S3中 2如果遇到的是单目运算符取S3栈顶的一个元素进行运算之后将结果压入到栈S3中 3如果遇到的是双目运算符取S3栈顶的两个元素首先出栈的在左后出栈的在右进行双目运算符的计算将结果压入到S3中 遍历完整个栈S1最后S3中的值就是逆波兰表达式的值。 栈实现表达式计算【数据结构】 思路 所包含的运算符有‘’‘-’‘*’‘/’‘’‘’。 1建立两个栈一个用来存储操作数另一个用来存储运算符, 开始时在运算符栈中先压入‘/0’一个表达式的结束符。 2然后从左至右依次读取表达式中的各个符号操作数或者运算符 3如果读到的是操作数直接存入操作数栈 4如果读到的是运算符则作进一步判断 若读到的是‘/0’结束符而且此时运算符栈的栈顶元素也是‘/0’结束符则运算结束输出操作数栈中的元素即为最后结果。 若读到的是‘’或者读到的运算符的优先级比目前的运算符栈中的栈顶元素的优先级高则将运算符直接存入运算符栈继续读表达式中的下一个符号重复步骤3和4 若读到的是‘)’,而且此时运算符栈的栈顶元素是‘(’结束符则将运算符栈中的栈顶元素退出来继续读表达式中的下一个符号重复步骤3和4 若读到的运算符的优先级等于或小于之前的运算符的优先级则从操作数中退出2个从运算符中退出一个进行运算将运算结果存入操作数栈再把之前读到的运算符与目前的运算符栈顶比较重复步骤4即现在不读下一个元素 /*
输入:
9(3-1)*310/2 输出
20注意:其实注释的地方可以用来调试本人主要根据大话数据结构的思路写出来的如果有什么地方错了多谢提出。
*/
#include stdio.h
#include string.h
#include stdlib.h
#include iostream
using namespace std;
struct stack{char data[101];int top;
};struct stack2{int data1[101];int top;
}; struct stack tak;
struct stack2 tak2;bool jia(char s){if(s || s-)return true;else return false;
}
bool ch(char s){if(s* || s/)return true;else return false;
}
int number(int y, int x, char s){if(s)return x y;if(s-)return x - y;if(s*)return x * y;if(s/ )return x / y;
}int main(){char s1[20];scanf(%s,s1);getchar();tak.top 0;tak2.top 0;//中缀表达式转化为后缀表达式 for(int i0;istrlen(s1);i){if(s1[i]0 s1[i]9){int tep s1[i]-0;while(s1[i1]0 s1[i1]9){tep * 10;i;tep s1[i]-0; }
// printf(%d ,tep);tak2.top;tak2.data1[tak2.top] tep;}else{if(tak.top0 || tak.data[tak.top](){tak.top;tak.data[tak.top] s1[i];}else{char temp tak.data[tak.top];if( jia(temp) (ch(s1[i]) || jia(s1[i]) || s1[i]() ){tak.top;tak.data[tak.top] s1[i]; }else if(ch(temp) (ch(s1[i]) || s1[i]()){tak.top;tak.data[tak.top] s1[i];}else if(s1[i])){while(tak.top0){if(tak.data[tak.top](){tak.top--;break;}
// printf(%c ,tak.data[tak.top]);int t1 tak2.data1[tak2.top];tak2.top--;int t2 tak2.data1[tak2.top];int t3 number(t1,t2,tak.data[tak.top]);tak2.data1[tak2.top] t3;tak.top--;}}else if(ch(temp) jia(s1[i])){while(tak.top0){if(tak.data[tak.top](){break;}
// printf(%c ,tak.data[tak.top]);int t1 tak2.data1[tak2.top];tak2.top--;int t2 tak2.data1[tak2.top];int t3 number(t1,t2,tak.data[tak.top]);tak2.data1[tak2.top] t3;tak.top--;}tak.top;tak.data[tak.top] s1[i];}} } }while(tak.top0){
// printf(%c ,tk.data[tak.top]);int t1 tak2.data1[tak2.top];tak2.top--;int t2 tak2.data1[tak2.top];int t3 number(t1,t2,tak.data[tak.top]);tak2.data1[tak2.top] t3;
// cout t3 t3endl;tak.top--;}printf(%d,tak2.data1[tak2.top]);return 0;
} 转载于:https://www.cnblogs.com/0526yao/p/10372092.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911411.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!