DS博客作业03--栈和队列

1.本周学习总结

  • 这次的上机考试是学习以来最差的一次。就算平时打过的题目,也由于某些原因,不是编译错误,就是得不到满分,很难受。明明觉得自己的代码没问题,可是就是查不出错误。这也体现了栈和队列的题目的灵活和难度。学习栈和队列,总给我一个感觉,好像是都在背代码,代码背住了,这个题目也许可以用用,一旦换了一个题,好像又无从下手了。很多时候也比较无奈。我问过了学长学姐们,寻求了一点建议。但是好像帮助不是很大。栈的学习,到目前为止,我都没有很实质性的突破。感觉问题很多,符号配对,我也只能理解出思路,但是要我脱离课本,根本打不出,不是这里漏,就是那里漏。表达式转换也是如此。总之,栈和队列的题目,在思考的时候一定要严谨很多。这次的上机测试,实话说错的挺冤枉的,都是一个两个小细节在耗费我的时间,明明平时很容易打出来的题目,到了考场上面估计是因为思想紧张,不是这里漏个分号,就是那里多个符号。我查不出来的主要原因还是想偷懒,写的时候不愿意把程序要求的其余函数打出来,用编译器运行,就是打题目需要的函数,这导致我全程都没有调试,查不出一些小错误。以后的学习中,要明白题目要求的其余函数的重要性,就算题目不需要提交这个函数,也得学会,理解它如何来的,否则到了要用的时候就没辙了,代码整体也调试不出了,这个问题上次老师也提过,但是没重视,以后要明白这个重要性。

2.PTA实验作业

2.1.题目1:

6-3是否合法出入栈操作

2.1.2代码截图

2.1.3本题PTA提交列表说明。


  • Q1:一开始的编译错误,是第一次使用容器,出栈的时候st.pop()括号里面还加了元素比如st.pop(1);

  • A1:这是对代码基本功能的不熟悉导致的,我百度后改正了,括号里面不需要元素,它只能出栈顶元素

  • Q2:后面一直都是15分,差一个点过不去,我尝试用了普通方法,还是15分。

    最后回归容器方法,还是过不去。

  • A2:问了同学,原来是没有考虑一开始就算非法的情况,如果操作符号是O;是第一个操作符,直接是对空栈操作,这一步少了,我加了if,在操作出栈前判断空栈,这也警示我,不管什么时候出栈就需要判断是否为空栈。

2.2.题目2:

2.2.2代码截图

2.2.3本题PTA提交列表说明。

  • Q1:前面的编译错误是因为,一开始没有想到课本的构造新的尾指针的办法,想用count直接代替,忽略了它和头指针的关系,导致两个量的关系不能够正确的衔接。

  • A1:翻看课本后,学习到 一种办法,构建新尾指针,通过count和首指针front的关系去搭建一个新的尾指针。

  • Q2:后面的编译错误,看上去很简单,其实耗费了我很多时间。原因就是出在这里MaxSize,我以为这个还是宏定义,直接用 了,没有看清楚题目是在结构体里面定义的。

  • A2:所以我把MaxSize改成了Q->MaxSize;这也告诉,要注意这些细节。宏定义才可以直接引用。

2.3.题目3:

2.3.1设计思路

1.初始化一个字符串和栈//字符串用于存需要判断的括号,栈用于匹配
2.将字符串和栈作为形参传入函数
3.进入函数,遍历字符串,所有属于右边括号的都进栈。
   遍历到右括号的时候,用e存取栈顶,并栈顶元素匹配,如果匹配成功flag=1;并且把栈顶出栈,方便进行下一符号匹配
  如果匹配不成功就输出栈顶e,返回0;
4.最后空栈和flag匹配成功,就返回1;
非空栈但是也匹配成功也属于不符合题意的,输出栈顶元素,返回0;
5.主函数根据函数返回值输出yes/no

2.3.2代码截图



2.3.3本题PTA提交列表说明。

  • Q1:这个题目上手快,打完直接有分,但是有一个测试点过不去,就是所有符号都匹配成功了,但是后面栈里面还有元素,这也属于不符合题意的情况。我一开始后面没有针对这种情况,直接:
  • A1:看了pta测试点,我明白了有这种情况的存在,所以我改成了这样:

    就算上面的程序循环完后,都成功了,但是到了这里只要检测到栈没有空,就进行else的语句输出栈顶元素,同时返回0;

2.4.题目4:

2.4.1设计思路

1.初始化队,定义一个数组,完成数据输入
2.m>n情况输出
3.报数号入队,便于后续操作
4.将要输出的元素前面的元素存入数组 ,并且出队。让报数元素作为队首暴露出来
5.队不空。输出队首元素,开始报数,
6.把原来数组的元素接到队后面,开始下一次循环报数
7.直到队中元素满足不了游戏,最后把存在数组中的元素输出

2.4.2代码截图



2.4.3本题PTA提交列表说明。

  • Q1:问题一把队和栈搞混了,取队首元素的时候用的q.top(),编译错误了。

  • A1:改成了q.front(),刚刚开始学习队和栈。使用这些容器的时候很容易搞错。要多注意

  • Q2:忘记了当队中的元素少的时候,执行循环出来少了最后的部分元素,因为被存到了数组中,出队了。这个时候需要把数组中的元素输出

  • A2:最后加了一个循环把数组里面的元素报出来,这样就可以完成游戏。

3、栈和队列上机考试

3.1 题目 (错的都是非常简单的地方)

代码截图



错误原因 :

这个题目我第一眼看到了非常熟悉,很快就敲完了。由于少了GetOp函数。无法调试,我提交总是8分
5分钟能解决的问题,耗费了我大半个小时。最终遗憾没有15分。最后回到宿舍,对比了练习的代码,完全一样的,看不出错误。我叫室友帮我对比2份代码,对比半天,终于找出来了:


把输出样例2个感叹号搞混了,这里不需要加!,结果取掉!代码完全正确!

3.2题目

代码截图


错误原因 :

这个舞伴问题的也是算比较熟悉的,所以我也打的很快。由于前面的第一题把我的时间都浪费了很多。我可能有点紧张,打的时候很快。结果敲完后,提交很多遍都编译错误,用编译器想试下,但是编译器一点运行就没反应。然后没有什么时间了就跳过了。课后,在看了下错误

  • 1:错误1:

    rear打成了reat;
  • 2:错误2:

    为空的情况下估计我是复制的题目给的初始定义函数里面的,忘记把后面的=0去掉。
  • 3:错误3:

    dancer打成了dacer

学习体会

   这次的上机考试对我的意义挺大的,以前很少出现这种情况,我觉得犯小错误的原因终究还是自己没底气,慌了。总结起来还是平时的训练的时候没有真正深入骨髓。如果这个东西真的学到家了,当自己打出这样的错误的时候,脑子里应该会很直接的提醒自己。像以前一样的,我上机考试的时候明显的错误很容易看出来,这次可能就是平时的准备不到位。才导致这种情况的发生。还有就是编译调试,这次我完全脱离了编译调试,最主要的就是我练习的时候没有把题目不需要的函数去重视起来,今后这方面千万不能够马虎了,如果还不重视。下次考试又是不能调试的去打代码,很难正确。
这次的考试对我能力的提高上可能没什么大的作用,由于前面容易题的消磨时间,没有去碰其余的题目,而且选择题都慌到没有保存,得了个0分。改正这种低级错误看上去很容易, 其实是需要积累的,为什么以前很少出现,因为以前学习更加掌握的深。准备也更加的好。结合这段时间栈的学习,就是由于我对知识掌握不够牢固,才会临阵慌乱。总之,说再多也没有用,也没有什么很大的感受可以说。一切照旧,该学的东西及时学习就行了。
posted @ 2019-04-21 17:13  秋斌  阅读(275)  评论(2编辑  收藏  举报