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

    1.本周学习总结

    谈谈你对栈和队列结构的认识及学习体会。

        栈和队列的本质就是线性表。所以,相应的栈跟队列都有两种存储结构:顺序存储结构、链式存储结构。 
        栈的特点是后进先出,根据栈时进时出的规则,出栈的顺序可以跟入栈顺序不不同,而队列的特点则是先进先出,入队的顺序是怎样的那么出队的顺序就是怎样的。与线性表相同,栈和队列的顺序存储结都会有空和满两种情况,而链式存储结构相应的也是一般不用考虑满的情况。在学习迷宫问题时,栈和队列同样可以解决迷宫问题,不过栈是深度搜索,找到的迷宫路径不一定的最短路径,而队列则是广度搜索,找到的路径一定是最短路径。
        在学完一个个进栈、出栈、入队、出队……的函数之后,我们又学了C++中的两个类:stack、queue,原本自己手打函数,一大段一大段的代码,只要一行就可以解决了。不过因为这两个类都是链式存储,出栈、出队完,那些出栈、出队的数据就没了,所以这两个类并不是所有时候都适用的,所以该自己手打代码的时候还是得自己打。
    

    2.PTA实验作业

    本周要求挑4道题目写设计思路、调试过程。题目选做要求:

    • 栈、队列函数题目分别选择1题
    • 栈、队列编程题分别选择1题

    2.1 题目1:在一个数组中实现两个堆栈

    本题要求在一个数组中实现两个堆栈。
    
    函数接口定义:
     - Stack CreateStack( int MaxSize );
     - bool Push( Stack S, ElementType X, int Tag );
     - ElementType Pop( Stack S, int Tag );
    

    2.1.2 代码截图



    2.1.3 本题PTA提交列表说明

    • Q1:做这道题的时候,老师在课上已经讲过了,所以提交列表里就两行,那为什么还会出现编译错误呢?
    • A1:那时候我还以为是一遍过的,结果一提交,编译错误,看了眼PTA的报错,好吧,老毛病又犯了,总把MaxSize当作是全局的常数,然后用到它的时候,直接就把MaxDize赋值给谁谁谁,忘记了结构体调用。

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

    假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。 你需要用队列操作实现上述算法。请完成下面5个函数的操作。
    
    函数接口定义:
     - int QueueLen(SqQueue Q);//队列长度 
     - int EnQueue(SqQueue &Q, Person e);//加入队列 
     - int QueueEmpty(SqQueue &Q);//队列是否为空 
     - int DeQueue(SqQueue &Q, Person &e);//出队列 
     - void DancePartner(Person dancer[], int num); //配对舞伴 
    Q:队列
    e:参加舞会的人
    dancer:全部舞者
    num:参加舞会的人数
    

    2.2.2 代码截图



    2.2.3 本题PTA提交列表说明


    这道题看提交列表没用,我是在vs上调试完,能运行正确了才复制提交的

    • Q1:一开始的时候,不太会写,发现要写的函数没有用在给出的main()函数中
    • A1:然后想着先把那些基础的函数写完,写的时候还纠结了一下队空、队满的情况要不要分类讨论,写完了之后,才发现这些函数好像是用在DancePartner()函数中
    • Q2:然后就开始纠结,为什么没把队列传参,就自己设了两个队列在DancePartner()函数中
    • A2:把所有的都写完了之后,运行了一下,结果运行时出错了,于是就又看了一遍题目给出的那段代码,发现题目中已经设了两个队列,然后因为传参没有传队列进去,我就不知道该怎么写,然后想想,算了,直接在DancePartner()函数中用吧,把我自己设的那两个队列换成题目中的那两个之后,他能运行了,而且还是正确代,提交了一些就过了。

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

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

    2.3.1 设计思路

    定义两个链栈:s1、s2,s1用来储存字符串,利用栈的后进先出的特点,将s1中一半的字符从栈顶出栈,传入s2中(如果字符串为奇数,多出栈一次,不传入s2中)。把两个栈的栈顶进行比较,相同,两个栈同时出栈,继续比较当前栈顶,以此类推;若不相同,则说明该字符串不是对称串。
    

    2.3.2 代码截图


    2.3.3 本题PTA提交列表说明


    这题其实挺简单的,当时舍友问我这道题怎么做的时候,我还没写,看了眼题目,然后瞬间就想到了这种做法,提交后一遍过的事实证明,这个做法是可行的。把这题写入博客园也不是因为这题有多难多难,只是想记住一种思路(因为我经常做题时可能有很多觉得不错的想法、思路,但是随着题目的完成,这些当时挺不错的思路也跟着消失了,写到博客园中,以后再看的时候,可能就会有,欸,还有这种做法的感觉)

    2.4 题目4:银行业务队列简单模拟

    设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。
    

    2.4.1 设计思路

    定义两个队列,q1、q2,根据队列先进先出的特点,在输入的过程中,将奇数的存放在q1中,偶数的存放在q2中,由于A窗口优先输出,则在输出时当q1不为空的情况下,先输出一个奇数,再判断q1是否为空,输出一个奇数,在q2不为空的情况下再输出一个偶数。
    

    2.4.2 代码截图



    2.4.3 本题PTA提交列表说明

    • Q1:当时看到题目,欸,超简单,不就输出两个奇数,在输出一个偶数嘛,然后……就错了(在vs上运行的时候)
    • A1:后面仔细想了想,不对,万一A窗口的人数不是偶数呢,于是在第二次出队前又加上了一个判断语句
    • 所以说,不要因为一个题目看着简单,就不怎么思考,还是要好好考虑题目中是不是有什么坑

    3.栈和队列上机考试

    错题及解决办法

    截图错题代码,分析错误原因及后续要改进地方。请至少列举2题。如果拿满分同学,这部分可不写,直接拿3分。
    注意:分析错误原因及体会,主要讲代码错误。

    错题一

    • 错误分析
      当时上机考试的时候,看到这道题,想都没怎么想,直接选B,因为之前做过的题目,都是说长度为m的队列,出队时的操作,那不就是front =( front +1)%m了嘛,然后考完了之后一看,emmmmm,我这题怎么错了,再一看,好吧人家是数组A[0..m],总共m+1个数……所以答案选D:front =( front +1)%(m+1)
    • 体会
      所以说,不要觉得题目看着眼熟,然后就想当然,之前就真么做的,那这题也就这样的,还是要认真的审题!审题!审题!

    错题二

    • 错题分析
      上机考试的时候,一看到这道题,心里瞬间一慌,然后……脑袋一片空白,不知道这种题该怎么做,记得当时我是把运算符也给入栈了,也不知道怎么算的,反正就算了个5。后来,考试完了,脑袋清醒了,再看这道题……怎么这么简单,我当时在想什么,为什么要把运算符也给入栈了(当事人就是非常的后悔.jpg)
    • 体会
      上机考试的时候,出现大脑空白的情况,也只能说明我对这一部分掌握的并不如我想象中的牢固,很多知识点我基本都是一遍过,当时懂了,如果题目没出现,基本不会再去过问的那一种,这种习惯是真的不好,(虽然到现在都还没改过来)不过借着写博客园再把这题过一遍,加深一些印象

    小结

        这次上机考试呢,发现自己时间完全不够用,只做了选择题,和函数题,编程题一道都没写(连提交记录都没有的那种),所以错题只写了两道选择题(我写了的题目中就错了这两道)
        时间不够用呢,主要是有一下两点:一、做过的题目不熟练,还是会有各种小错误;二、上机考试前,PTA里的题没打完,对题目没印象,直接现场打代码+调试,再加上那个不太熟练,以至于时间花费过多。这就导致了后面的题目做不完的情况。PTA没去打我认错,最近各种练习赛比较多,题目又难,往往打完比赛之后就不会想再去碰代码,看到PTA就不想动,以至于PTA作业一拖再拖。不过既然这种消极的心态影响到了我,那我就应该调整好自己的状态,毕竟学习更重要。
    
  • 相关阅读:
    vue-webpack介绍
    vue-ES6模块化的导入和导出
    vue-前端模块化
    vue-插槽作用域的使用
    vue-具名插槽的使用
    vue-插槽的基本使用
    vue-父组件获取子组件对象实例
    IO(六)
    IO(五)
    关于overflow:hidden
  • 原文地址:https://www.cnblogs.com/Lay-549/p/10743564.html
Copyright © 2011-2022 走看看