代码改变世界

DS博客作业03--栈和队列

2019-04-21 21:36  HappyBoy~  阅读(653)  评论(0编辑  收藏  举报

1.本周学习总结(0--1分)

通过学习栈,我知道了栈是一种基本运算受限的线性表,只允许从栈顶一端进行操作,另一端为栈底,栈顶是动态的,入栈出栈就是在栈中添加或删除一个数据,随着栈顶也跟着变化,由于这种操作受限,而且操作难度也比较大,栈也遵循“先进后出”的原则。
队列也是一种操作受限的线性表,出栈和入栈在队列的队头队尾都是动态的,出队后其后继元素成为新的队头,进队后新的元素成为队尾元素,由于这种操作的特点,先进的元素先出,队列也叫“先进先出表”。
栈和队列的学习,感觉算法思想理解起来比较难,把那些算法用代码实现起来更难,由于c语言基础薄弱在刷题的时候效率比较低,平时打pta都是要经常请教同学,参考代码。在同学的帮助下学会了用c++中的类,在刷题时候多少提高了些效率,但是还是与同学有很大差距,所以还是要不断突破自己。

2.PTA实验作业(6分)

2.1.题目1:6-2 在一个数组中实现两个堆栈 (20 分)

注:函数体不要写设计思路。编程题用文字描述设计思路。(可不写伪代码)

2.1.1代码截图


2.1.2本题PTA提交列表说明

Q1:在ElementType Pop( Stack S, int Tag )函数中出现编译错误;
A1:自己看不出哪里错了,最后拿同学代码参考改出来的。

2.2 题目2:6-12 jmu-ds-舞伴问题 (20 分)

假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你需要用队列操作实现上述算法。请完成下面5个函数的操作。

注:函数体不要写设计思路。编程题用文字描述设计思路。(可不写伪代码)

2.2.1代码截图


2.2.2本题PTA提交列表说明

Q1:在Dev-C++上调试的时,发现有编译错误和无法调试的现象;
A1:终于在大佬和舍友的帮助下完成了这道题,可是还是不知道为什么会那样。

2.3 题目3:7-3 符号配对 (20 分)

2.3.1设计思路

对数组进行输入、遍历。如果是左括号就进栈,是右括号就判断是否栈空,是就输出no,结束程序。如果栈不空,继续判断栈顶元素是不是和右括号匹配的左括号,不是则输出no,结束程序,出栈。循环结束的时候,如果栈是空的且flag等于0,则输出yes,否则输出no。

注:函数体不要写设计思路。编程题用文字描述设计思路。(可不写伪代码)

2.3.2代码截图




2.3.3本题PTA提交列表说明

Q1:忘记在Dev-C++把编译器选为C++;
A1:大佬帮我指出问题后才知道有这个功能;
Q2:在主函数的for循环里判断的那块一直编译不出来;
A2:在百度查找代码,然后参照它修改。

2.4 题目4:7-5 jmu-报数游戏 (15 分)

报数游戏是这样的:有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提交列表说明

Q1:这个题目也不是什么好理解的,一开始就走上了自以为多的代码路途;
A1:最终还是要靠一帮大佬,才发现自己的变量名也不怎么规范。

3、栈和队列上机考试(-3--3分)

错题及解决办法

3.1题目1:6-1 另类堆栈 (15 分)

截图错题代码,分析错误原因及后续要改进地方

分析错误原因:忘记在Dev-C++和在PTA里把编译器选为C++;

后续改进地方:多问多做,熟能生巧。

3.2题目2:7-1 jmu-ds-符号配对 (20 分)

截图错题代码,分析错误原因及后续要改进地方

分析错误原因:只是背了代码,没有完全理解代码,就想不起完整的;

后续改进地方:不会的在网上或者书上查,也可以在C&DS交流群多问问老师同学。

注:分析错误原因及体会,主要讲代码错误。