- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * POJ 3250 :code #include iostream #include stack #include string using namespace std; int main() { string cmd, url; stackstring s1, s2; //定义了两个栈 //栈1用作存储操作队列,而栈2则用作临时保存栈1出栈的数据 s1.push(/); //首页压栈 while(cin cmd) { if(cmd == VISIT) //访问操作 { cin url; s1.push(url); //把访问的地址压入栈1 while(!s2.empty()) s2.pop(); //清空栈2 //想一想,为什么要清空栈2 cout s1.top() endl; } else if(cmd == BACK) //返回操作 { if(s1.size() 1) //如果此次弹出后不会使得栈变空 { s2.push(s1.top()); //把栈1顶元素压入栈2 s1.pop(); cout s1.top() endl; } else cout Ignored endl; } else if(cmd == FORWARD) //前进操作 { if(!s2.empty()) //栈2有元素,意味着可以前进 { s1.push(s2.top()); //把栈2的顶端元素压入栈1 cout s2.top() endl; s2.pop(); //弹出栈2的顶端元素 } else cout Ignored endl; } else break; } return 0; } 栈的经典题目 数制转换 进制转换的时候每次将所求得的余数压栈。 直到商为0。 按顺序取出来便是正确的转换结果。 数制转换 标准输入输出 题目描述: 数制转换。(要求采用栈实现,练习进栈入栈函数的编写) 输入: 输入的第一行包含两个数,n,d n表示要转换的数的个数 d表示要转换成的进制数 接下来是n个十进制数 输出: 对每一测试用例,用一行输 出数制转换后的结果 输入样例: 2 8 123 213 输出样例: 173 325 火车车厢重排问题 乱序的车厢在一条铁轨上,压入的车厢不能回到原轨道,希望在狭窄的空间里将其排成有序的序列。 按顺序扫描车厢, 如果当前的车厢为有序序列的需要车厢,那么参与排队去。 否则,将其压栈,由于车厢在栈内必须有序,所以要找一个可以压并且栈顶元素与当前车厢序号差小的栈压。 如果没有可以压的栈,那么新开一个栈。 开的栈数为最小用栈数。 汉诺塔 三根柱子A,B,C,在A上有从小到大放着一些碟子,碟子在柱子上只能以小的压在大的上面的形式存在,求如何使这些碟子的顺序原封不动的转移到另外一跟柱子B上。 汉诺塔拓展 同样是3根柱子和一些盘子,变化的是盘子数是给定的。还是只能以小压大的方式存在,但目标状态和初始状态的顺序是一样的。 Poj3601 开关盒布线判断 对于一个给定的黑箱子开关盒,给定配对的针脚,判断这样的线可不可以在一个平面的电路板上布下。(不相交) 从某点顺时针开始, 当前元素和栈顶元素可以配对,那么弹出栈顶元素。 当前元素和栈顶元素不能配对,那么将当前元素压栈。 最终栈不空就无解。 回溯深搜的非递归形式 回溯深搜的时候系统就是用栈来实现的。 可以自己模拟一下试试。 后序表达式求值 后续表达式(逆波兰式)的特点:没有括号。 从前向后扫, 遇到操作数压栈; 遇到操作符,从栈中取出2个操作数运算,结果压栈。 最终栈中所剩的数为结果。 中序表达式求值 我们先来定义运算符的优先级: ( +,- *,/,% 从上到下依次升高 中序表达式求值 准备2个栈,一个专门存放运算符,另一个专门存放操作数。 1.遇到),那么退栈计算到(为止.结果压栈。 2.遇到运算数.那么压栈。 3.如果当前运算符优先级低于栈顶运算符.那么计算栈顶运算符并将结果压栈. 4.否则压栈. 中序表达式转后序 定义优先级: (大于左边所有,小于右边所有 -,+ *,/,% 中序表达式转后序 从左向右, 定义当前运算符now之前运算符last 1.遇到数字直接输出。 2.遇到)就把之前的全部输出。 3.如果now优先级高于last运算符.那么输出now。Last不变。 4.否则输出last。last=now。 表达式转换 还可以通过树的方式建立表达式树来转换 实训2:表达式求值 标准输入输出 题目描述: 小学求算式问题。要求采用栈实现。 输入: 输入第一行为用例个数n。 接下来n个表达式。 输出: 对每一个用例的表达式,输出其结果。 输入样例: 3 2+5
文档评论(0)