1.本周学习总结
本周学习的内容是栈和队列,相比前一单元的顺序表内容,容易了很多,操作上更加简便。顺序表包括顺序表和链表两块大内容,顺序表的操作主要有创建顺序表,查找顺序表中的元素,顺序表元素的插入和删除。链表的主要操作有头插法建表和尾插法建表,链表的遍历查找,有序链表的插入和删除以及两个有序链表的合并。而本单元的栈和队列内容则就简单的多。首先是栈,栈的特点就是先进后出,常用在程序对于符号配对的判断等功能,操作就是进栈和出栈,以及判断栈空栈满。其次是队列,队列的特点是先进先出,队列的内容也主要是进队和出队操作,以及判断队空和队满。这些操作用c++语法只需要stack和queue两个库函数就可以很快的实现。所以队列和栈的内容会比较简单一些。
2.PTA实验作业
2.1.题目1:
6-2 在一个数组中实现两个堆栈 (20 分)
本题要求在一个数组中实现两个堆栈。
2.1.2代码截图
2.1.3本题PTA提交列表说明。
·Q1:这道题是结合了vs和同学的帮助下完成的,所以没有太多提交记录,第一次遇到的问题就是maxsize直接用,没有动态申请内存,导致错误一直显示着。
·A1:在同学的指导下动态申请了maxsize。
·Q2:第二次的错误是在于对于top2指针直接指向-1,然后内存就崩了
·A2:改变了一下想法,指向maxsize试一下,歪打歪撞显示没有错误情况。
2.2 题目2:
6-11 另类循环队列 (20 分)
如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。
2.2.2代码截图
2.2.3本题PTA提交列表说明。
·Q1:第一次输出超限了,说实话刚开始我还不知道是什么错误,后面仔细看了下是一个return没加上去。
·A2:在进队函数里面加上return
·Q2:第二次的多种错误是真的让我懵了,在编译器上调试的好好的,提交上去有问题。
·A2:在几个同学的共同研究下,也没找出问题,最后对比了一下他们的代码,改了一下空格问题,奇迹出现了
2.3 题目3
7-1 jmu-字符串是否对称 (20 分)
编写一个算法利用顺序栈判断一个字符串是否是对称串。所谓对称串是指从左向右读和从右向左读的序列相同。
2.3.1设计思路
这道题的设计思路是定义字符串数组存放输入的符号,定义一个栈,依次把数组中的元素存入栈中。在定义一个字符变量ch,把栈顶元素赋给ch,拿ch与数组进行比较,这样子就刚好是从后面开始与前面对比,然后进行判断是否相同并且执行相应操作。
2.3.2代码截图
2.3.3本题PTA提交列表说明。
·Q1:第一次提交漏洞有很多,首先是循环的判断条件,没有使用for循环,while循环的话条件设置的不行,然后没有写下栈空和栈满的判断。
·A1:增加了一个i的自增,没有想到要改变其他的东西
·Q2:看了其他同学的方式之后,分享了自己的算法,然后看了一下他的操作,恍然大悟,要加上判断条件,for循环能这么用
·A2:改变了整体的代码,for循环,加上判断。
2.4 题目4
7-5 jmu-报数游戏 (15 分)
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。要求用队列结构完成。输出数字间以空格分隔,但结尾不能有多余空格。