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

时间:2021-11-17 19:34:00

1.本周学习总结

  • 第三章主要介绍栈和队列的基本概念,存储结构,基本运算算法设计和应用实例。从组成元素的逻辑关系来看,栈和队列都属于线性结构。栈和队列与线性表的不同之处就在于他们的相关运算具有一些特殊性。更准确地说,一般线性表上的插入、删除运算不受限制,而栈和队列上的插入、删除运算均受某种特殊限制,因此栈和队列也称为操作受限的线性表。栈是一种常用而且重要的数据结构之一,如用到保存函数调用是所需要的信息,通常在将递归算法转换成非递归算法是需要使用到栈。
  • 栈是一种只能在一段进行插入或删除操作的线性表。它的特点就是后进先出。每次出栈的都是栈顶元素。
  • 队列也称队,它也是一种操作受限的线性表,其限制为仅允许在表的一端进行插入操作,而在表的另一端进行删除操作。把进行插入的一端称为队尾,把进行伤处的一端称为队头或队首。向队列插入新元素称为进队,新元素进队后变成新的队尾元素,从队列中删除元上都称为出队或离队,元素出队后就称为新的队首元素。

2.PTA实验作业

2.1题目1 jmu-ds-是否合法出入栈操作

2.1.1设计思路

2.1.2代码截图

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

2.1.3本题PTA提交列表说明

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

  • Q1思路是把 ‘I’ 和‘O’ 放进字符数组中,然后提交时两次出现编译错误。
  • A1之后仔细把提交窗口的错误提示看了一遍,后面发现时判断的上限把str[i]!='\0'错写成了str,还有switch()中str[i]写成了str。这些都是基础不扎实的错误。

2.2题目2 jmu-ds-舞伴问题

2.2.2代码截图

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

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

2.2.3本题PTA提交列表说明

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

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

  • Q1问题难在配对舞伴的函数,其他的跟书上差不多
  • A1基于前面出现的一些基础的问题,在纸上模拟出函数,设置两个队列分别存储男女,先依次入队,只有两个队不空则不断出队配合,循环结束后,输出非空队的对头元素还有dev 的调试逐渐找到问题所在

2.3题目3 jmu-字符串是否对称

2.3.1设计思路

  • 对于字符串str,先将其所有元素进栈。从头开始扫描str,同时出栈元素,将出栈元素与从头开始扫描的str元素相比较,若不同则返回false。当str扫描完毕后返回true。实际上,从头开始扫描是从左向右读,出栈元素是从右向左读,它们相同的话则是对称串。

2.3.2代码截图

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

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

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

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

2.3.3本题PTA提交列表说明

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

  • Q1第一次提交错误在DestroyStack函数
  • A1后面实在不行就把free 换成了delete,结果就可以用了
  • Q2忘记用DestroyStack删除st

2.4题目4 报数游戏

  • 报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。要求用队列结构完成。输出数字间以空格分隔,但结尾不能有多余空格。

2.4.1设计思路


if 总人数<退出位次 或 总人数<1
输出“error!"
1至n依次入队
end
i=0
while 队列非空
i++
if i=m
出队并输出一个元素 i=0
else 出队再进队
end

2.4.2代码截图

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

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

2.4.3本题PTA提交列表说明

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

  • Q1提交的时候 出现编译错误忘记把用的是C++ 的头文件
  • A1将编译器改为了C++编译器
  • Q2进队出对后忘记把i=0写上

3.栈和队列上机考试

  • 这次 上机考,考的非常是非常的不好,我是先开始做函数题,半天才写出来两道两道,后面 开始把编程题第一题写出来,但是 只过了两个测试点,有一个测试点一直过不了,最后返回去开始做选择题,结果写选择题根本没有静下心来写,脑袋不知道想的都是些啥,有选项有错的,思路不清晰的

  • 选择题全错,平时的课堂派作业没有脱离课本,一到考试基础概念太不扎实,题目改进以下就不会了。

  • 函数题的另类循环只有12分

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

  • 问题出在于Q->Front=(Q->Front+1)%Q->MaxSize;写成了Q->Front=Q->Front+1%Q->MaxSize;

    还有Q->Data[(Q->Front+Q->Count)%Q->MaxSize]=X;也写成了Q->Data[Q->Front+Q->Count%Q->MaxSize]=X;

  • 总体来说还是 不够冷静太容易慌乱了,希望下次能够准备充分,考一个好看一点的成绩。