第3章学习小结

  这章讲了栈和队列的特点是后进先出队列的特点是先进先出,这些都不是重点,重点是遇到问题要知道用哪种数据结构。

  比如数制的转换,(1348)10=(2504)8,它的计算过程是

      N       N /8          N%8

                  1348      168            4

                   168         21            0

                     21         2              5

                     2            0              2

可以看出要得到(1348)10的8进制,首先求出的是最后一位的数字4,最后求出的是第一位的数字2

显然我们要把4  0   5  2四个数字先存起来

然后再倒过来输出,即输出2504

怎么存这四个数字呢?

用数组存?当然可以,你只需要多开一个变量p,记录数组当前有多少个数字,顺便把p当成下标用。

处理的时候就要注意细节,比如第一个数的下标是不是0,输出的时候是从后往前输出,还要注意边界。

用栈来存?当然可以,你只需要4  0   5  2依次压入栈,算完后全部出栈就可以了。

但是用栈来存的话,相当于划分了层次,同一时间思考的层次不同,再举个栗子

拿括号匹配的题目来说()【】 {}

遇到左括号,用数组做的话:

    if(遇到左括号){

      p++;

      左括号放入数组;

    }

     用做的话:

    if(遇到左括号){

      左括号入栈;

    }

看出直接用数组来做多了一步下标的移动,实际上使用栈也存在下标的移动(如果用顺序栈),只不过在main函数中不需要考虑,

在写栈函数的时候才需要考虑这个问题(STL真好用)

这就相当于划分了层次

就遇到左括号这一步来说

直接用数组做,你要考虑下标,还要考虑存放问题

用栈做,你只需要考虑入栈

使用栈来解决这个问题,在同一时刻可以减少关注的东西,敲代码的时候就可以减少错误

这就相当于   c++  ——>  数据结构   的飞越

栈的引入简化了程序设计的问题,划分了不同的关注层次,使思考范围缩小了。(划重点)

作业的编程题就是括号匹配问题,注意敲代码最好先把思路写下来就行了,因为敲代码时注意了细节,但有可能忽略了全局。

上次博客的目标达到了(a完T1的题)

可惜的是天梯赛1-8没有a出来,我想了下原因主要是我对数据的存储和一些函数不是很了解

(画横线的是我的输入)

在打敲笨钟那题时,交代码后提示我格式错误,当时一脸懵逼。

后来仔细一看,原来是多了换行。

cin.getline(a,1003,'.');中,遇到‘.’停止读入,并把'.'变成了'\n',对于计算机来说,我这里进行了三次输入,计算机看到的是

qiao ben zhong.[空格]qiao ben zhong.[空格]qiao ben zhong.[空格]

处理后就是qiao ben zhong\nqiao ben zhong\nqiao ben zhong\n

三次a的内容分别是:1.qiao ben zhong

           2.\nqiao ben zhong

              3.\nqiao ben zhong

所以才会出现上面那种输出(上面分析只是我根据输出进行的猜测,希望有大佬分享一下经验

 

 把‘\n’吸掉就没事了(当时没想到......)

接下来的目标是:把线段树专题打完,好好做一个组员

 

posted @ 2019-03-31 11:44  丿不落良辰  阅读(140)  评论(2编辑  收藏  举报