博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈的应用
阅读量:4107 次
发布时间:2019-05-25

本文共 2208 字,大约阅读时间需要 7 分钟。

例题一:括号匹配问题

解题思路

#include
#include
using namespace std;stack
s;//定义一个堆栈 char str[110];//保存输入字符串 char ans[110];//保存输出字符串 int main(){ while(scanf("%s",str)!=EOF){ int i; for(i=0;str[i]!=0;i++){ if(str[i]=='('){ s.push(i); ans[i]=' '; } else if(str[i]==')'){ if(s.empty()==false){ s.pop(); ans[i]=' '; } else ans[i]='?'; } else ans[i]=' '; } while(!s.empty()){ ans[s.top()]='$'; s.pop(); } ans[i]=0; puts(str); puts(ans); } return 0;}

例题二:

#include
#include
using namespace std;char str[220];int mat[][5]={1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,};//优先级矩阵 若mat[i][j]==1表示i号运算符优先级大于j//+为1号 -为2号 *为3号 /为4号//我们人为添加在表达式首尾的标记运算符为0号stack
op;//运算符栈stack
in;//数字栈void getop(bool &reto,int &retn,int &i){ //获得表达式中下一个元素 //若reto为true 表示该元素为一个运算符 其编号保存在retn中 // 若reto为false 表示该元素是一个数字 其值保存在retn中 //i表示遍历到的字符串下标 if(i==0&&op.empty()==true){ //若此时遍历字符串第一个字符且运算栈为空 人为添加编号为0的标识字符 reto=true; retn=0; return; } if(str[i]==0){//此时字符串已被遍历完 reto=true; retn=0; return; } if(str[i]>='0'&&str[i]<='9'){ reto=false; } else{ reto=true; if(str[i]=='+'){ retn=1; } else if(str[i]=='-'){ retn=2; } else if(str[i]=='*'){ retn=3; } else if(str[i]=='/'){ retn=4; } i+=2; return; } retn=0; for(;str[i]!=' '&&str[i]!=0;i++){ retn*=10; retn+=str[i]-'0'; } if(str[i]==' ') i++; return; } int main(){ while(gets(str)){ if(str[0]=='0'&&str[1]==0) break; bool retop;int retnum; int idx=0; while(!op.empty()) op.pop(); while(!in.empty()) in.pop(); while(true){ getop(retop,retnum,idx); if(retop==false){ in.push((double) retnum); } else{ double tmp; if(op.empty()==true||mat[retnum][op.top()]==1) op.push(retnum); else { while(mat[retnum][op.top()]==0){ int ret=op.top(); op.pop(); double b=in.top(); in.pop(); double a=in.top(); in.pop(); if(ret==1) tmp=a+b; else if(ret==2) tmp=a-b; else if(ret==3) tmp=a*b; else tmp=a/b; in.push(tmp); } op.push(retnum); } } if(op.size()==2&&op.top()==0) break; } printf("%.2f\n",in.top()); } }

 

转载地址:http://fnssi.baihongyu.com/

你可能感兴趣的文章
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
都无代码了,还要程序员吗?
查看>>
面试想拿 10K,HR 说我只配7k?
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>
影响科学圈的那些计算机代码
查看>>
乐视视频 App 图标改为“欠 122 亿”,网友:我在别家分红包,却在你家随份子!...
查看>>
为何程序员总喜欢写技术博客,看完恍然大悟...
查看>>
如何判断一家互联网公司要倒闭了?
查看>>
想快速上手机器学习?来看下这个 GitHub 项目!
查看>>
GitHub 标星 3.6k,一本开源的深度学习中文教程!
查看>>
9 款你不能错过的 JSON 工具
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
200页!分享珍藏很久的Python学习知识手册(附链接)
查看>>
推荐几个私藏很久的技术公众号给大家
查看>>
王垠受邀面试阿里 P9,被 P10 面跪后网上怒发文,惨打 325 的 P10 赵海平回应了!...
查看>>
Python 趣味打怪:147 段简单代码助你从入门到大师
查看>>
卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!
查看>>
厉害了!Python 编辑器界的神器 Jupyter ,推出官方可视化 Debug 工具!
查看>>
卧槽!Java 虚拟机竟然还有这些性能调优技巧...
查看>>
听说玩这些游戏能提升编程能力?
查看>>