1.本周学习总结

本周学习了栈和队列的结构,在对于某些问题时,这种数据结构可以很好的解决问题,例如表达式的转换以及表达式求解,运用栈的结构,可以很好的解决。本节学习最具有收获的一点就是栈和队列容器的学习和应用,容器的应用,在编程的时候,可以大大节省时间以及代码行数,更加方便的实现进栈出栈的操作,对于今后的编程学习以及栈和队列的应用都有着很大的意义。

2.PTA实验作业

2.1.题目1

  假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。 比如输入字符串IOOI,表示栈操作为入栈出栈出栈入栈,这样操作序列是不合法。

2.1.1 设计思路

  本题主要是对于栈内符号判断。扫描字符数组:
  1.在栈空的时候,如果遇到‘O’则直接结束,否则就将其入栈。
  2.在栈不为空时,如果是'I',则将其入栈,若是‘O’,则将栈顶‘I’出栈。
  3.循环执行上述两步,最后判断栈内是否为空,如果是空则符合操作,不为空则不符操作。

2.1.2 代码截图

2.1.3 PTA提交列表说明

2.2 题目2

  如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。

2.2.1设计思路

  1.本题主要应用循环队列的结构,其关键点就是尾指针的定义,虽然题目未给出。
  2.入队:首先判断队列是否为满,如果不满,则执行入队操作。
  3.出队:首先判断队列是否为空,如果不空,则执行出队操作。

2.2.2代码截图

2.2.3 PTA提交列表说明

2.3 题目3

  编写一个算法利用顺序栈判断一个字符串是否是对称串。所谓对称串是指从左向右读和从右向左读的序列相同。

2.3.1 设计思路

  本题整体思路和表达式转换差不多
  1.先将扫描到的字符入栈,再对接下来的字符进行判断。
  2.如果接下来的字符和栈顶元素一致,则将栈顶元素出栈。
  3.结束时判断是否为空栈,如果为空,则是对称字符串。反之,不对称。

2.3.2 代码截图


2.3.3 PTA提交列表说明

2.4 题目4

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

2.4.1 设计思路

  本题主要运用队列结构,通过不断的出队入队来排序,再将其元素放入数组a输出
  1.先判断m和n的大小。如果m>n,则直接返回。如果相等,则返回队尾元素。如果m<n,则放回不断的排序
  2.排序:循环m次,先将队头元素储存,再将其出队,再入队。
  3.到了要输出的元素,就将其放入数组a
  4.最后先输出数组a中的元素,再将队列中剩下的元素输出。

2.4.2 代码截图

![](https://img2018.cnblogs.com/blog/1476554/201904/1476554-20190422170807734-1868184778.png)
![](https://img2018.cnblogs.com/blog/1476554/201904/1476554-20190422170827622-458149455.png)

2.4.3 PTA提交列表说明

  此题虽然提交一次正确,但在编程的过程中,还是出现了一些问题
  • Q1:队列循环时,忘记将n自减,同时出入队语法错误

  • A1:加入语句n--,并将队列循环重新写入。

  • Q2:循环时未将其元素删除,导致重复出现

  • A2:加入语句q.pop( ),使队列得以不断循环

3、栈和队列上机考试

3.1 错题1

  本题要求在一个数组中实现两个堆栈。

3.1.1代码截图



3.1.2原因分析

  这道题的大致思想是知道到,但还是因为一些小错误导致整题崩溃,而且在这题花费了大量的时间,导致后面的题目没时间,心态也崩溃。

3.2 错题2

  输入一个后缀表达式,程序求出表达式值。

3.2.1代码截图


3.2.1原因分析

  这道题错把数组看成指针,也就是这个点一直过不去,非常无奈。