zoukankan      html  css  js  c++  java
  • DS博客作业03--栈和队列

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

    • 本周对栈和队列进行了学习,刚开始看上去还挺唬人的,但是开始写题之后发现,栈和队列无非就是两种结构而已,还有stack()和queue()可以用,简直不要太方便。然后感触就是在写程序的时候不要想得非常具体,而是要基于这两种结构想他们的特点,这些特点能解决什么问题,解决问题的过程具体要怎么样,在脑子中构建出这整个过程。
    • 队列其实可以看作是一种特别的线性表,一种对存储有特定要求的线性表。先进先出,就像平常的排队一样,先排队的先处理,后排队的后处理。主要运算算法包括入队Push(注意是否队满)、出栈Pop(注意是否队空)。在C++中,队列的实现被封装在类queue中,该类存在于头文件中。
    • 栈跟队列一样,也是一种特殊的线性表,其特殊的地方也是在存取这方面。队列的特性是先进先出,栈则是后进先出,像叠盘子一样。在C++中,有类stack类封装了对栈的实现。队列只允许在一端进行插入操作,而在另一端进行删除操作。

    2.PTA实验作业(6分)

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

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

    2.1.1代码截图

    2.1.2本题PTA提交列表说明


    本题一次性过关,主要是共享栈的设计,使其有两个栈底,一个为下标为0处,另一个为下标为maxsize-1处,进栈时一个下标从0开始加,另一个从maxsize-1开始减。

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

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

    2.2.1代码截图



    2.2.2本题PTA提交列表说明

    • Q1:一开始出现编译错误
    • A1:看了pta提交时的解释发现->不识别,写指针写习惯了,在用结构体的时候习惯写p->sex,用p.sex才是对的
    • Q2:开始时出现格式错误,百思不得其解,看起来输出都是一模一样的
    • A2:后来反复对比了很久,输出时姓名之间的空格是两个...不是一个...

    2.3题目三 7-2 jmu-ds-符号配对 (15 分)

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

    2.3.1设计思路

        定义字符型数组s 输入s
        for循环i=0 to i<len
        不是符号  跳过以下语句
        为左符号 进栈
        为右符号
             栈空 退出程序(因为右符号没有左符号和它配对 表达式已经配对错误了)
             为右符号且配对 出栈
        结束for循环
    接下来判断是否配对成功
        栈空且i=len  配对成功
        i不等于len 配对失败,输出no以及栈顶(栈为空不输出)
    

    2.3.2代码截图


    2.3.3本题PTA提交列表说明

    • Q1:最初提交,两个测试点过不去,当括号不匹配且栈空时出现段错误
    • A1:发现忘了最重要的在出栈时没判断栈是否为空,导致程序崩溃
    • Q2:后来在判断是否配对成功的问题上遇到了困难,之前觉得只要栈空就是配对成功,后来发现不是这么回事
    • A2:有时候如果只有右符号,栈一直是空的,但是很明显是配对错误的,所以引入一个len,当i<len时,即使栈中为空也是配对错误。

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

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

    2.4.1设计思路

        定义m,N,数组line
        定义队列qu;
        m<N
        	数组line中的N个元素全部进队
        	队列qu不为空  
        	报数m次,不为m的报数后重新入队,报数为m的直接出队 ,输出
        m>=N 输出输入错误
    

    2.4.2代码截图


    2.4.3本题PTA提交列表说明


    本题一次性过关,感觉这题挺简单的,主要就是队列的不断出队和重新入队,利用队列先进先出的特点解决问题。

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

    3.1错题一:7-1 jmu-ds-符号配对 (20 分)

    3.1.1代码截图


    3.1.2分析错误原因

    先贴上上机考时的提交列表

    这题是pta上已经做过的题了,上机考的时候考到这题,本来挺自信的,觉得应该挺快就能写出来,但是还是犯了很多小错误,忽略很多细节到导致这题因为测试点没有全部过去,调试了挺久的,然后考试时就没时间做其他的题了。首先还是出现了段错误,总是在出栈时忘记判断栈是否为空,我这脑子...怎么就记不住呢。然后就是配对时有很多情况没考虑充分,反反复复调来调去。结束后上机时的代码和之前在pta栈和队列上写的代码比较了下,发现上机考的时候写的会混乱比较多,虽然也是对的,但是有些情况之间写的比较重复,有重叠的部分,在考试的时候脑子比较混乱,想到的情况就叠加上去,只想着把测试点过去,代码思路会比较乱。

    3.2错题二:6-3 jmu-ds-表达式求解 (20 分)

    3.2.1代码截图

    这题在上机考的时候没有写出来,所以没有代码。主要之前pta上中缀转后缀的题就没有怎么搞清楚,然后遇到这种类似的题就没啥自信能写出来,直接跳过去做其他的题了。现在贴上这道题的正确代码

    3.2.2错误原因分析

    因为没写出来,所以也没办法分析上机考时的错误,这里说一下这道题的设计思路吧。

    遇见正数 直接入栈
    遇见负号,判断是负数还是减号 是负数将负数入栈
    遇见运算符号 出栈两次进行相应的运算 其中要注意除号分母为0的情况
    
  • 相关阅读:
    12月15日,progress_dispaly
    Android studio和Genymotion-VirtualBox的配合使用
    JDK7动态代理源码分析
    跟踪mqttv3源码(二)
    跟踪mqttv3源码(一)
    Spring自定义标签
    Eclipse发布Maven项目到远程服务器
    结合实际项目分析pom.xml
    Maven的安装环境配置
    PHP7新特性
  • 原文地址:https://www.cnblogs.com/zyxaa/p/10747362.html
Copyright © 2011-2022 走看看