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

1.本周学习总结

    学习C++后,相比较于C,C++比较容易实现栈和队列的操作,像是开挂一样,而徒手用C写的话太繁琐了
    栈和队列有区别,前者是后进先出,后者是先进后出
    其次呢,栈是一端受限,一段允许进行操作的线性表。先放的后取,后放的先取。放在栈上说,就是先进后出。
    队列是一种限定性的线性表。先进先出。
    和栈一样,它常见的两种存储是顺序存储和链式存储。

2.PTA实验作业

2.1.题目1:

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

2.1.2代码截图


2.1.3本题PTA提交列表说明

    Q1:输出超限
    A1;在申请完空间后,忘记修改S->MaxSize的值,导致输出超限

2.2.题目1:

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

2.2.2代码截图

2.2.3本题PTA提交列表说明

    A1:忽略了循环,在增加减少的时候应该修改count的值,还要保证添加的位置不超多MaxSize
    A2:输出用puts(), puts() 和 printf() 相比也有一个小小的缺陷,就是如果 puts() 后面的参数是字符指针变量或字符数组,
    那么括号中除了字符指针变量名或字符数组名之外什么都不能写。

2.3.题目1:

    假设表达式中允许包含3种括号:圆括号、方括号和大括号。即(,[,'{'。
  编写一个算法判断表达式中的括号是否正确配对, 要求利用栈的结构实现。

2.3.1设计思路

    先遍历所输入的数据,遇到{,(,【就入栈,遇到},),】先判断栈内是否为空,若为空,则不配对,若不为空,则取栈顶,
  与之配对,配对成功就继续,知道数据全部配对完,在判断栈内是否还有元素,有则配对失败,无则成功。

2.3.2代码截图


2.3.3本题PTA提交列表说明

    Q1:一个很容易遗忘的点,就是遇到右符号,但是栈里为空的情况
    A1:通过pta的提示,在遇到右符号时,多加一条对栈的判断

2.4.题目1:

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

2.4.1设计思路

    首先判断m是否大于n,是则结束;不是则将数据输入到队列里,设置变量i,当i==m,输出队头并且出队,不等于就出队在入队    

2.4.2代码截图

2.4.3本题PTA提交列表说明

    A1;这题上课刚刚见过简化版本,回来就开始打,所以问题不大,编译错误只是忘记换C++;
  C++处理这类题真的比C快捷很多

3、栈和队列上机考试

错题一

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

    正确代码

    错误在处理输出的时候是输出队头,没有找好队头的位置
  导致代码崩溃,在考试时也不能冷静思考,对队列的理解不够
  也受到插入的影响,使得输出的代码有点乱。

错题二

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


    这题pta上没有,是课本上的,当时也没有认真看,导致上机手足无措。当时写这题时就想着混点分就好,结果没混到,
  就想把前面的队列写出来。
posted @ 2019-04-21 16:01  白白以桃花入笺  阅读(299)  评论(2编辑  收藏  举报