1.本周学习总结
栈和队列操作相似,不同的是栈为后进先出,队列为先进先出。学了queue与stack函数后,运用这两个函数来进行有关的入队(栈)出队(栈)、取队头队尾非常方便,在做题时候运用可以减少代码量。掌握了基本操作函数后,在做某些题时仍觉得困难,还需继续加强锻炼。
2.PTA实验作业
2.1.题目1:7-2 jmu-ds-符号配对
2.1.1设计思路
本题只需考虑小中大括号三种情况,运用while循环来遍历字符串,循环当中采用switch语句来判断左右括号,遇到左括号时将其进栈,遇到右括号时取栈顶,然后用核查是否匹配函数Match来判断括号是否配对,不配对则提前结束循环并输出相应内容;配对的话则将栈顶出栈,方便下一个括号的判断。循环结束后,若栈为空,则说明括号都匹配;若还有未出栈的,则不匹配。
2.1.2代码截图
2.1.3本题PTA提交列表说明。
- Q1:刚开始运用str字符数组来存放字符串,循环时用str[i] i++来循环,出现编译错误。
- A1:定义指针*p来代替str数组,循环当中运用指针递增来循环。
- Q2:没判断括号是否配对,而是用s.top()==*p来判断,设计错误,将匹配认为是相等。
- A2:在每个遇到右括号的case语句中增加判断是否配对的语句,不匹配则提前结束,匹配则出栈。
- Q3:switch语句中设计判断三个判断是否配对的语句后出现段错误。
- A3:另外设计Match函数来判断括号是否匹配,将栈顶符号和*p传入函数中,配对则返回1,不配对返回0,答案正确
2.2.题目2:6-12 jmu-ds-舞伴问题
2.2.1设计思路
函数题,设计思路省略。
2.2.2代码截图
2.2.3本题PTA提交列表说明。
- Q1:起初没认真看函数上边的#define定义的内容,出现如Maxsize等函数中没有的东西,出现编译错误。
- A1:将函数中的Maxsize改为define中的内容,return内容也改为OK与ERROR。
- Q2: 输出时两个人之间少输出一个空格,出现格式错误。
- A2:修改DancePartner函数里的cout内容,答案正确。
2.3.题目3:jmu-报数游戏
2.3.1设计思路
定义队列,将游戏人数按编号依次进队,定义变量i循环自增,用i求余m来判断要出队的是几号,i求余m=0时,输出号数,再将此数出队,求余m不等于0时,定义临时变量k来存放这个数,再将其出队,之后再让k进队构成循环,直至队列为空。
2.3.2代码截图
2.3.3本题PTA提交列表说明。
- Q1:queue函数运用不熟练,出现少加front后面的括号等情况
- A1:将不规则的地方修改。
- Q2:不是要出队的所报号数的人再次进队设计出错;没考虑只有一个数时的情况
- A2:运用k来储存需再次进队的队头元素,再将k进队;在循环开始时加上判断语句:if(s.front()==s.back())来判断。
- Q3:当m>n时,应输出error,设计时误写为m<n时输出error。
- A3:修改大小关系,当m>n时输出error。
2.4.题目4:7-6 银行业务队列简单模拟
2.4.1设计思路
输入n的数值 for i=1 to n 输入一个数num; if(n为奇数)进入qA队列 else 进入qB队列 while(qA,qB均不为空时) 输出qA中的第一个数, 输出后让该数出队列 if(qA出队列的次数为偶数倍) qB出队一个元素 end while while(qA不为空) 将qA中剩余元素输出 while(qB不为空) 将qB中剩余元素输出 return 0;
2.4.2代码截图
2.4.3本题PTA提交列表说明。
- Q1:队列相关函数运用出错,导致编译错误
- A1:修改错误函数用法
- Q2:为考虑奇数或偶数队列较长队列需继续出队的操作,答案错误
- A2:在后边加上两个循环函数,并控制输出空格的格式,来输出较长队列的剩余元素。
3、栈和队列上机考试
错题及解决办法
1.符号配对
错题代码:
按老师上课所讲的思路来写,有了思路但是用代码具体表示出来会出现很多错误,函数设计上仍存在问题,代码量较大,错误也照不出来。
解决办法:在网上寻找到一种不用设计过于复杂的函数,而是在主函数中一步到位来解决问题的方法,感觉这种方法适合我一些,就按照此思路进行设计,解决问题。
2.jmu-ds-表达式求解
错误代码:
有基本做题思路:遇到运算符号的时候将栈里的元素出栈进行运算,然后将结果入栈,直至字符串结束,得出结果。但是具体代码实现起来对我来说仍存在困难,按自己的方法打出来是错误的。
解决办法:找同学询问好的方法,了解具体代码怎么实现后解决此问题。