栈和队列的学习还是比较好理解的,就是实际写起代码来困难。通过老师上课展示的源代码,在做pta时照着葫芦画瓢,稍微能有一些理解。这周收获最大的就是知道删除栈和队列元素之后需要返回栈顶和对头元素,不然会出现异常访问的情况。在利用队列进行操作的过程中,注意入队的时候判断有没有空来决定要不要修改头指针,出队时则增设一个条件判断是否为最后一个节点,然后单独处理。利用循环链队列的时候,则特别要注意最后要将头指针和尾指针的关系用next建立起来,循序循环队列则要注意在进行出入队操作时,首尾指针做相应的加减运算后应当对MaxSize取余,保证不出现**假溢出**的情况。其次,就是在符号配对问题上学会了用容器和string来做,可以直接调用库函数来进行操作,相当方便,就是还不太熟练。
本次上机考一开始是比较开心的,循环队列,另类堆栈还有符号配对都是原题,过了第一题另类堆栈后就不顺利了,另外两题一直改不出错误,直到出了考场才发现原来是一些细节问题。可能考前太过于自信吧,觉得自己只要知道思路就好了,其他不用管,但偏偏细节决定成败。而且,我总觉得自己学习方法出了问题,努力和结果不成正比,应该是没理解到题目或对自己太过相信了吧。。。
2.1.1代码截图
2.1.2本题PTA提交列表说明。
假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你需要用队列操作实现上述算法。请完成下面5个函数的操作。
2.2.1代码截图
2.2.2PTA提交列表说明
A2:一开始以为乱码是因为输出的时候类型错了导致,就一直在检查,直到对比同学代码,才发现应该在出队列DeQueue这个函数中将front指针将自增再返回结果,因为后面函数要返回数给X,所以应该放在前面。
此题的话代码难点不多,就是函数之间的包含关系,舞伴配对那个函数包含了所有函数的调用,只要弄清楚他们之间的关系,还是比较好做。一开始以为队列Q是先存所有的dancer然后再根据性别分别放入队列。后面发现可以不用这么复杂,直接进队就好,Q只是一个函数定义需要用到的变量
如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。
错误代码:
正确代码:
解决办法:
A2:把Q->Count当成了尾指针,导致后面的while(Q->Count)循环出不来,经修改后即可(此处特别注意循环队列队头队尾以及Maxsize的关系)
在审题的时候还是要仔细,这题在考前没有做,是临场发挥,比较不熟悉。对循环队列的首尾指针移动时需要对MaxSize取余不是很理解
假设表达式中允许包含3种括号:圆括号、方括号和大括号。即(,[,'{'。编写一个算法判断表达式中的括号是否正确配对, 要求利用栈的结构实现。
错误代码:
正确代码:
解决办法
A3:符号匹配时,应该
将 改为
匹配是找左符号中对应右符号的位置下的符号和栈顶元素是不是相同,而不是直接在左符号中找符号
这题在考前是做过的,按照老师的方法用容器存储符号,调用find,empty等库函数来写非常方便,就是在考试的时候,可能也是时间比较紧,写的代码在判断条件时像未找到符号应该返回的是-1忘记了,一时间又急于找自己的逻辑错误,导致这题失分严重,终归还是自己没有理解透这个题目,多练习几次就好了
原文:https://www.cnblogs.com/zhonghaiqing/p/10741785.html