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

    1.本周学习总结#

    “栈像一只袜子,队列就像通心粉”,这个比喻很形象。
    栈和队列其实有类似之处,比如它们都只能在端点进行插入、删除,没有像数组那么方便取出数据,但它们有自己独特的优势,像符号配对、报数和银行问题,使用栈和队列是很好的选择。
    它们的不同之处在于栈只有一个端点,出栈、入栈都是通过一个端口,而队列出队、入队则在不同端口,所以有些问题就更适合用队列来解决。由于它们结构上的差异,栈中元素都是先进后出,队列则先进先出。所以通过栈和队列的配合,可以实现队列的逆转。
    栈和队列的容器可以大大简化我们的代码,使代码更简洁明了。判断字符串这题使用栈的容器的代码是自己写函数代码的1/2。虽然使用容器,出入栈(队)看似简单,其实不同的题目还是有难度的,符号配对、表达式转换就复杂许多,要考虑的情况较多,测试点也比较繁多。
    

    2.PTA实验作业#

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

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

    2.1.2代码截图###


    2.1.3本题PTA提交列表说明。###

    Q1:出现多种错误
    A1:刚开始做的时候没有按书上的做法,同时将S->Top1和S->Top2同时置为-1
    Q2:栈满,栈空的条件没有考虑清楚
    A2:由于刚开始S->Top1和S->Top2都设置错了,栈满栈空就更不用说了,后来看了书才知道,栈空为S->Top1==-1,S->Top2==MaxSize,栈满为S->Top2-S->Top1==1
    

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

    2.2.2代码截图###


    2.2.3本题PTA提交列表说明。###

    Q1:刚开始编译错误
    A1:原因是pta上的编译器没选C++,还有刚开始的时候对结构体的使用有点忘记了,卡了一会
    Q2:出现格式错误
    A2:输出男女舞伴中间要2个空格,没注意只输出一个,后来发现这个输出样例的空格和上面好像不太一样,仔细看才发现是两个空格
    

    2.3题目3:7-2 jmu-ds-符号配对##

    2.3.1设计思路###

    输入字符串
    遍历字符串
    如果是左括号就进栈
    是右括号就判断是否栈空,是就输出no,结束程序。若栈不空,继续判断栈顶元素是不是和右括号匹配的左括号,不是则输出no,结束程序
    出栈
    循环结束
    判断栈是否为空,空则输出yes,否则输出栈顶元素在输出no

    2.3.2代码截图###



    2.3.3本题PTA提交列表说明。###

    Q1:出现部分正确
    A1:一开始模仿7-1字符串是否对称的做法,把左右符号都一次性进栈,再遍历字符串,看看和栈顶元素是否匹配,然而这种做法遇到{}()这种例子时就崩了。后来就采用遍历字符串,发现左符号就进栈,遇到右符号就开始判断了,不再是等符号都入栈了才开始判断。
    Q2:若不匹配,输出当前栈顶元素再换行输出no,若栈顶为空,则输出no
    A2:做的时候没有考虑栈空问题,只对栈不空时做了处理,输出栈顶元素再输出no,所以在遇到右符号开始判断的时候,先判断栈是否为空,是就只输出no,结束程序
    

    2.4题目4:7-6 银行业务队列简单模拟##

    2.4.1设计思路###

    建两个队列,q1代表A窗口,q2代表B窗口
    先输入顾客总数,然后在循环中依次输入每个顾客编号,每输入一个就判断一个,若是奇数就进q1队列,偶数就进q2队列
    在q1和q2队列非空的情况下,先把q1中队头前两个元素先输出再出队,然后把q2中队头元素输出、出队,完成一次循环
    最后如果q1队列中有剩余元素,就都输出,q2也是同样的处理方法
    

    2.4.2代码截图###


    2.4.3本题PTA提交列表说明。###

    Q1:思路问题
    A1:一开始没有想到用两个队列来做,就停住了,后来采用两个队列,问题就简单了许多
    Q2:部分正确
    A2:没有考虑到只有A窗口顾客或只有B窗口顾客这种情况,所以空格的输出有点问题,所以在q1、q2队列中有剩余元素的情况中加了先判断flag变量的值,看是不是第一个元素
    

    3、栈和队列上机考#

    jmu-ds-舞伴问题##

    错误代码截图###



    进队列时应是Q->rear=(Q->rear+1)%MAXQSIZE,出队列时是Q->front=(Q->front+1)%MAXQSIZE,考试的时候把count和MAXQSIZE混淆了,用count代替了MAXQSIZE,所以编译器一直报错,但当时没有发现错误,就只好直接Q->rear++、Q->front++
    输出配对舞伴时,直接输出DeQueue(Fdancers,p)结果,忘了是应先调用DeQueue函数,再输出函数里面的p.name
    出错原因在于虽然知道题目思路,但没有注意一些细节的处理,虽然题目已经做过一遍,没有真正理解透就造成这个结果
    

    7-1 符号配对##

    错误代码截图###





    输入字符串的时候,少了str[i++]=ch,以至于程序出错,连结果都无法输出。还有就是判断栈是否为空时多了!应该是if(s.empty()),若满足则输出"?-}"这种符号,因为多了'!'答案也都是错误的。做pta时后两个测试点没过,所以代码还是存在一些问题
    字符串输入少了str[i++]=ch,这个就是很低级的错误了,短时间内完成代码还是有一定难度的,关键还是自己代码量不够吧
    			
    
  • 相关阅读:
    java上传视频文件
    java+HTML5实现断点续传
    web+上传大文件断点续传
    javaweb项目断点续传
    CKEditor从word粘贴问题
    netback的tasklet调度问题及网卡丢包的简单分析
    linux下开启ftp的21号port
    Dubbo--简单介绍
    OpenCV2马拉松第15圈——边缘检測(Laplace算子,LOG算子)
    【打CF,学算法——一星级】Codeforces Round #313 (Div. 2) A. Currency System in Geraldion
  • 原文地址:https://www.cnblogs.com/x-m-66/p/10743342.html
Copyright © 2011-2022 走看看