DS博客作业03--栈和队列
1.本周学习总结
栈是一种只能在一端进行插入或删除操作的线性表,特点是“后进先出”;而队列只允许在表的一端进行插入操作,在表的另一端进行删除操作,特点是“先进先出”。
这几周学习了栈和队列,相比较之前的链表学习,这章的内容相对于链表的学习较易于理解。平时做作业的时候觉得自己掌握的差不多了,但是通过这次的考试,发现自己在栈和队列这部分掌握的其实还差很多,在一些条件的判断上还需要更加谨慎鸭,还需要加油呀💪
2.PTA实验作业
2.1 在一个数组中实现两个堆栈
本题要求在一个数组中实现两个堆栈。
2.1.1 代码截图
2.1.2 PTA提交列表说明
- 1-2 没有注意编译器,学习了C++语法后,总是习惯性的使用C++语法,导致编译错误
- 3 疏忽写成 S->Top2==S->MaxSize-1 导致错误
- 4 和上面类似没有认真思考两者的关系,写成 if(S->Top1==S->Top2) 导致错误
2.2 jmu-ds-舞伴问题
假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你需要用队列操作实现上述算法。
2.2.1 代码截图
2.2.2 PTA提交列表说明。
- 1 开始没有认真阅读主函数,函数中多写了输出剩余人数的部分,导致答案错误
- 2-3 没有意识到男性和女性名字间有两个空格,就一直不知道哪里格式错误,直到问了同学......
2.3 jmu-ds-符号配对
假设表达式中允许包含3种括号:圆括号、方括号和大括号。即(,[,'{'。编写一个算法判断表达式中的括号是否正确配对, 要求利用栈的结构实现。
2.3.1 设计思路
- 首先遍历数组,遇到左符号则存入栈中,遇到右符号则判断栈内的情况,栈空配对失败,若配对成功则出栈左符号;遍历结束,若栈空则配对成功,不空则配对失败。
2.3.2 代码截图
2.3.3 PTA提交列表说明。
- 以为不配对只要输出no就好,然后仔细阅读了输出样例发现了如果栈不为空时还要输出剩下的
2.4 jmu-报数游戏
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。要求用队列结构完成。输出数字间以空格分隔,但结尾不能有多余空格。
2.4.1 设计思路
- 设一个变量count模拟数数,然后对m进行求余,当结果等于0时,就出队输出并出队,不等于0就移至最后,直到数字全部输出
2.4.2 代码截图
2.4.3 PTA提交列表说明。
- 上课时讲过简易版的,所以做这道题时比较顺利,编译器上改了一两个小错误就完成了
3.栈和队列上机考试
平时做作业的时候觉得自己掌握的差不多了,但是通过这次的考试,发现自己在栈和队列这部分掌握的其实还差很多。
3.1 另类循环队列
-
错误:
-
正确:
可以因为开始在选择题上花了很多时间,然后就有点慌了,也出现许多平时或之前考试没有出现的错误,在做这道题的时候出现了许多错误,比如输出没有换行,忘记 return d; 等等,截图中展示的是因为忽略循环队列的特点,导致缺少一步 Q->Front %= Q->MaxSize ,也因为函数题不好调试,以上种种导致没有拿到这题的分数。
3.2
-
错误:
-
正确:
考试的时候没有把情况考虑完全,忽略了如果A队列为空,首先输出的是B队列的情况,导致多输出了一个空格,导致最后一个测试点没过