首页 > 其他 > 详细

9.14 | 学习笔记

时间:2019-09-15 00:54:17      阅读:126      评论:0      收藏:0      [点我收藏+]

 

1.波兰表达式这个题目以前总是看到,但是一直觉得数字和运算符的存放好烦,学了栈以后发现其实很简单。

然而接下来就是悲伤的故事,首先我第一次不小心把存放栈顶两个数字的运算结果的tmp设置成了int,丢失数据精度,

接下来我改上面的问题时,因为太懒,把计数器也设置成了double,数组下标必须是int这个大概是常识,我个辣鸡以前一直不知道!!!

贴原题和代码,请各位指正,我觉得输入那里写得好蠢

技术分享图片

 

 

#include <bits/stdc++.h>
using namespace std;
int cnt;
double a,b,tmp;
int jdg(string s)
{
    if(s=="+"||s=="-"||s=="*"||s=="/")return 0;
    return 1;
}
stack <double>stk;
string s[101];
int main()
{
    while(cin>>s[cnt])cnt++;
    for(int i=cnt-1;i>=0;i--)
    {
        if(jdg(s[i]))
        {
            if(s[i].find(.))stk.push(atof(s[i].c_str()));
            else stk.push(1.0*atoi(s[i].c_str()));
        }
        else
        {
            a=stk.top();stk.pop();
            b=stk.top();stk.pop();
            if(s[i]=="+")tmp=a+b;
            else if(s[i]=="-")tmp=a-b;
            else if(s[i]=="*")tmp=a*b;
            else tmp=a/b;
            stk.push(tmp);
        }
    }
    cout<<fixed<<setprecision(6)<<stk.top()<<endl;
    return 0;
}

 

 2.双向栈

这个题目本身不难,可惜做它之前在学环形队列,所以考虑的有点复杂,其实只要设置一个足够大的数组就不用考虑它满了的情况,至于翻转笨想也知道不可能真的会去翻转,不然肯定超时,设置一个标记用来表示栈顶就好

问题在于之前的环形队列,做的时候觉得自己想的很完备了,最后报错是run time error,这个错误其实常见的就是数组下标越界和除数为0两种情况,结果又去麻烦他了......有一句tail=(tail+1)%MAXN,稳妥起见还是应写作tail=(tail+1+MAXN)%MAXN

 

 

 

 

 

加油叭!有点喜欢某个人怎么破o(╥﹏╥)o

9.14 | 学习笔记

原文:https://www.cnblogs.com/MissCold/p/11520786.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!