1.本周学习总结
跟上周相比,感觉这周的栈跟队列会更简单一点,在打代码时不会有那么多的错误,应该是因为本章对指针的引用
更少。栈跟队列的不同点很少,都是数组的一种数据结构,栈是先进后出,而队列则是先进先出,栈的顶指针是指
向当前的元素,而队列的头指针则是指向当前元素的前一位。这周有学习了一点c++中STL的容器,在建立栈和队列
时用这种容器会方便很多,不用自己写各种栈跟队列的函数,而只要在程序的开头添加上相应的头文件即可,可以
省去很多时间,而且这些函数使用起来也很简单。
2.PTA实验作业
2.1.题目1:7-3 符号配对
2.1.1设计思路
先输入一个字符串str,遍历字符串,当碰到左符号的时候将左符号进栈,当碰到右符号的时候将
当前的字符与栈顶的字符比较,如果两符号配对,就将栈顶元素出栈,如果不配对,则将缺少的
符号用一个变量记住,方便在程序末尾输出当读到注释左符号的时候需进栈两次,同时读的到注
释右符号的时候也要比较两次。
2.1.2代码截图
2.1.3本题PTA提交列表说明
Q1:编译错误
A1:c++代码提交时选择了c语言代码
Q2:答案错误,将出栈语句放在了错误的位置
A2:遇到有符号时,先取栈顶然后直接pop,改正后应该是遇到右符号时先判断右符号与栈顶符号
是否匹配,若匹配才将栈顶pop
Q3:输出结果时问题,没有理解缺符号什么时候缺左符号,什么时候缺右符号
A3:应该是遍历完字符串后栈不为空时缺右符号,栈为空时缺左符号
2.2 题目2:7-6 银行业务队列简单模拟
2.2.1设计思路
先建立两个栈分别表示A窗口和B窗口,将输入的数值奇偶数存入A窗口和B窗口,然后就是循环,
每当栈A输出两个数值时栈B同时输出一个数值,并且栈B输出的数值应在栈A输出数值的后面
2.2.2代码截图
2.2.3本题PTA提交列表及说明
Q1:没有考虑栈空时的状态
A1:第一次的代码,栈A是一次性输出两个栈顶元素,没有考虑到当栈A第一次输出栈顶元素pop后
栈A为空这一问题,修改之后的代码是每一次栈顶元素出栈之前都加以判断栈是否为空
2.3题目3:6-11 另类循环队列
2.3.1设计思路
普通的队列是通过对头指针和队尾指针来判断队列是否为空和是否队列为满,和进行入队和出队,
本题引用一个队列长度替换队尾指针,所以入队和出队都要通过队列长度来进行,对头指针+队列
长度正好是队尾指针的位置,队空时队列长度则为0,队满时队列长度则为队列的最大容量
2.3.2代码截图
2.3.3本题PTA提交列表及说明
Q1:第一次做这题时,没有用队列长度解题
A1:刚做时在判断队空时并没有用到队列 长度,而还是想往常一样用对头指针来判断队列是否为空,
在出队和入队时没有把队列长度进行相应的改变。
2.4题目4:6-12 jmu-ds-舞伴问题
2.4.1设计思路
先建立两个数组,分别将男女的下标存入数组,为了方便后面程序同时输出一组舞伴,然后开始循
环,每次循环输出一组舞伴直到男或女没人。
2.4.2代码截图
2.4.3本题PTA提交列表及说明
Q1:第一次出现段错误
A1:段错误时在输出一男一女为舞伴时从两个栈中输出,没有判断栈是否为空,就会出现即使栈为空
仍然会取栈顶元素,导致段错误
Q2:格式错误,少了空格
A2:在输出时男女舞伴之间是两个空格而不是一个
3、栈和队列上机考试
题目1:6-3 jmu-ds-表达式求解
错误代码:
在考试时,这题只得到部分正确。在我的代码中只能对只有正数和整数的表达式进行求值,如果表达式中有
小数和负数的话,程序就会出错。加以改进的话应该是在每层循环里加上判断小数和负数的if语句,单独对这
两种情况求解。